<?xml version="1.0" encoding="gb2312"?>
<rss version="2.0">
<channel>
<title><![CDATA[破云一刀]]></title>
        <image>
        <title>http://hi.baidu.com</title>
        <link>http://hi.baidu.com</link>
        <url>http://img.baidu.com/img/logo-hi.gif</url>
        </image>
<description><![CDATA[人世间没有巧合，那只是一个命运的安排... ...]]></description>
<link>http://hi.baidu.com/%C6%C6%D4%C6%B5%B6</link>
<language>zh-cn</language>
<generator>www.baidu.com</generator>
<ttl>5</ttl>


<item>
        <title><![CDATA[民族之瑰宝《三字经》]]></title>
        <link><![CDATA[http://hi.baidu.com/%C6%C6%D4%C6%B5%B6/blog/item/aed8cd826b3ed9a80df4d2e4.html]]></link>
        <description><![CDATA[
		
		<div class="pb5">
<p>【三字经全文】 <br>
人之初，性本善。性相近，习相远。 <br>
苟不教，性乃迁。教之道，贵以专。 <br>
昔孟母，择邻处。子不学，断机杼。 <br>
窦燕山，有义方，教五子，名俱扬。 <br>
养不教，父之过；教不严，师之惰。 <br>
子不学，非所宜。幼不学，老何为？ <br>
玉不琢，不成器；人不学，不知义。 <br>
为人子，方少时，亲师友，习礼仪。 <br>
香九龄，能温席。孝於亲，所当执。 <br>
融四岁，能让梨。弟於长，宜先知。 <br>
首孝弟，次见闻。知某数，识某文。 <br>
一而十，十而百，百而千，千而万。 <br>
三才者，天地人。三光者，日月星。 <br>
三纲者，君臣义，父子亲，夫妇顺。 <br>
曰春夏，曰秋冬，此四时，运不穷。 <br>
曰南北，曰西东，此四方，应乎中。 <br>
曰水火，木金土，此五行，本乎数。 <br>
曰仁义，礼智信，此五常，不容紊。 <br>
稻梁菽，麦黍稷，此六谷，人所食。 <br>
马牛羊，鸡犬豕，此六畜，人所饲。 <br>
曰喜怒，曰哀惧，爱恶欲，七情具。 <br>
匏土革，木石金，与丝竹，乃八音。 <br>
高曾祖，父而身，身而子，子而孙。 <br>
自子孙，至玄曾，乃九族，人之伦。 <br>
父子恩，夫妇从；兄则友，弟则恭； <br>
长幼序，友与朋；君则敬，臣则忠。 <br>
此十义，人所同。 <br>
凡训蒙，须讲究。详训诂，明句读。 <br>
为学者，必有初。小学终，至四书。 <br>
论语者，二十篇；群弟子，记善言。 <br>
孟子者，七篇止；讲道德，说仁义。 <br>
作中庸，子思笔；自修齐，至平治。 <br>
孝经通，四书熟，如六经，始可读。 <br>
诗书易，礼春秋，号六经，当讲求。 <br>
有连山，有归藏，有周易，三易详。 <br>
有典谟，有训诰，有誓命，书之奥。 <br>
我周公，作周礼，著六官，存治体。 <br>
大小戴，注礼记，述圣言，礼乐备。 <br>
曰国风，曰雅颂，号四诗，当讽咏。 <br>
诗既亡，春秋作，寓褒眨，别善恶。 <br>
三传者，有公羊，有左氏，有榖梁。 <br>
经既明，方读子。撮其要，记其事。 <br>
五子者，有荀扬，文中子，及老庄。 <br>
经子通，读诸史，考世系，知终始。 <br>
自羲农，至黄帝，号三皇，居上世。 <br>
唐有虞，号二帝，相揖逊，称盛世。 <br>
夏有禹，商有汤，周文武，称三王。 <br>
夏传子，家天下，四百载，迁夏社。 <br>
汤伐夏，国号商，六百载，至纣亡。 <br>
周武王，始诛纣，八百载，最长久。 <br>
周辙东，王纲坠，逞干戈，尚游说。 <br>
始春秋，终战国，五霸强，七雄出。 <br>
嬴秦氏，始兼并，传二世，楚汉争。 <br>
高祖兴，汉业建，至孝平，王莽篡。 <br>
光武兴，为东汉，四百年，终於献。 <br>
蜀魏吴，分汉鼎，号三国，迄两晋。 <br>
宋齐继，梁陈承，为南朝，都金陵。 <br>
北元魏，分东西，宇文周，与高齐。 <br>
迨至隋，一土宇，不再传，失统绪。 <br>
唐高祖，起义师，除隋乱，创国基。 <br>
二十传，三百载，梁灭之，国乃改。 <br>
梁唐晋，及汉周，称五代，皆有由。 <br>
炎宋兴，受周襌，十八传，南北混。 <br>
十七史，全在兹。载治乱，知兴衰。 <br>
读史者，考实录。通古今，若亲目。 <br>
口而诵，心而惟。朝於斯，夕於斯。 <br>
昔仲尼，师项橐，古圣贤，尚勤学。 <br>
赵中令，读鲁论，彼既仕，学且勤。 <br>
披蒲编，削竹简，彼无书，且知勉。 <br>
头悬梁，锥刺股，彼不教，自勤苦。 <br>
如囊萤，如映雪，家虽贫，学不辍。 <br>
如负薪，如挂角，身虽劳，犹苦卓。 <br>
苏老泉，二十七，始发愤，读书籍。 <br>
彼既老，犹悔迟；尔小生，宜早思。 <br>
若梁灏，八十二，对大廷，魁多士。 <br>
彼既成，众称异；尔小生，宜立志。 <br>
莹八岁，能咏诗；泌七岁，能赋碁。 <br>
彼颖悟，人称奇；尔幼学，当效之。 <br>
蔡文姬，能辨琴；谢道韫，能咏吟。 <br>
彼女子，且聪敏；尔男子，当自警。 <br>
唐刘晏，方七岁，举神童，作正字， <br>
彼虽幼，身已仕；尔幼学，勉而致。 <br>
有为者，亦若是。 <br>
犬守夜，鸡司晨。苟不学，曷为人？ <br>
蚕吐丝，蜂酿蜜。人不学，不如物。 <br>
幼而学，壮而行。上致君，下泽民。 <br>
扬名声，显父母。光於前，裕於后。 <br>
人遗子，金满籯；我教子，惟一经。 <br>
勤有功，戏无益。戒之哉，宜勉力。</p>
<p> </p>
<p>观后感：</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 短短的百余字，现在看来总结了，一个人一生的道理。但是如今这个物欲横流的年代。这些民族文化的支柱正在被慢慢遗忘，慢慢腐蚀。</p>
</div> <a href="http://hi.baidu.com/%C6%C6%D4%C6%B5%B6/blog/item/aed8cd826b3ed9a80df4d2e4.html">阅读全文</a>
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/%C6%C6%D4%C6%B5%B6/blog/category/%D0%C4%C7%E9%B8%D0%CE%F2">心情感悟</a>&nbsp;<a href="http://hi.baidu.com/%C6%C6%D4%C6%B5%B6/blog/item/aed8cd826b3ed9a80df4d2e4.html#comment">查看评论</a>]]></description>
        <pubDate>2009-09-14  13:45</pubDate>
        <category><![CDATA[心情感悟]]></category>
        <author><![CDATA[破云刀]]></author>
		<guid>http://hi.baidu.com/%C6%C6%D4%C6%B5%B6/blog/item/aed8cd826b3ed9a80df4d2e4.html</guid>
</item>

<item>
        <title><![CDATA[C#编写NotifyIcon 系统托盘]]></title>
        <link><![CDATA[http://hi.baidu.com/%C6%C6%D4%C6%B5%B6/blog/item/353dbb2eb59271574ec226fa.html]]></link>
        <description><![CDATA[
		
		<p>1.设置窗体属性showinTask=false</p>
<p>2.加notifyicon控件notifyIcon1，为控件notifyIcon1的属性Icon添加一个icon图标。</p>
<p>3.添加窗体最小化事件(首先需要添加事件引用)：</p>
<p>// this.SizeChanged += new System.EventHandler(this.Form1_SizeChanged);</p>
<p>//上面一行是主窗体InitializeComponent()方法中需要添加的引用</p>
<p>private void Form1_SizeChanged(object sender, EventArgs e) <br>
 { <br>
  if (this.WindowState==FormWindowState.Minimized) <br>
  { <br>
&nbsp;&nbsp;  this.Hide(); <br>
&nbsp;&nbsp;  this.notifyIcon1.Visible=true; <br>
  }</p>
<p> } <br>
4.添加点击图标事件(首先需要添加事件引用)：</p>
<p> private void notifyIcon1_Click(object sender, EventArgs e) <br>
 { <br>
  this.Visible = true;</p>
<p>  this.WindowState = FormWindowState.Normal;</p>
<p>  this.notifyIcon1.Visible = false; <br>
 }</p>
<p> </p>
<p>5.可以给notifyIcon添加右键菜单：</p>
<p>主窗体中拖入一个ContextMenu控件contextMenu1，点中控件，在上下文菜单中添加菜单，notifyIcon1的ContextMenu行为中选中contextMenu1作为上下文菜单。</p> <a href="http://hi.baidu.com/%C6%C6%D4%C6%B5%B6/blog/item/353dbb2eb59271574ec226fa.html">阅读全文</a>
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/%C6%C6%D4%C6%B5%B6/blog/category/vb%2Enet">vb.net</a>&nbsp;<a href="http://hi.baidu.com/%C6%C6%D4%C6%B5%B6/blog/item/353dbb2eb59271574ec226fa.html#comment">查看评论</a>]]></description>
        <pubDate>2009-02-18  12:04</pubDate>
        <category><![CDATA[vb.net]]></category>
        <author><![CDATA[破云刀]]></author>
		<guid>http://hi.baidu.com/%C6%C6%D4%C6%B5%B6/blog/item/353dbb2eb59271574ec226fa.html</guid>
</item>

<item>
        <title><![CDATA[报个到]]></title>
        <link><![CDATA[http://hi.baidu.com/%C6%C6%D4%C6%B5%B6/blog/item/896e2d0170a1cb04728da541.html]]></link>
        <description><![CDATA[
		
		<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  好久没有来了，因为那个倒霉的金融危机的冲击，我们公司进行了大裁员，哎兄弟有幸活到了现在。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  可是！活下来的并非就是舒服的呢。自从一帮朋友走后。我忙活近4个月，天天加班，累的都快灵魂出窍了。呵呵！终于，活都忙完了。我又回来了，继续打点我的这个小家，回来和大家报个到。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  祝大家都能安然的走过这个倒霉的年头。希望大家平安快乐！</p> 
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/%C6%C6%D4%C6%B5%B6/blog/category/%D0%C4%C7%E9%B8%D0%CE%F2">心情感悟</a>&nbsp;<a href="http://hi.baidu.com/%C6%C6%D4%C6%B5%B6/blog/item/896e2d0170a1cb04728da541.html#comment">查看评论</a>]]></description>
        <pubDate>2008-11-26  22:51</pubDate>
        <category><![CDATA[心情感悟]]></category>
        <author><![CDATA[破云刀]]></author>
		<guid>http://hi.baidu.com/%C6%C6%D4%C6%B5%B6/blog/item/896e2d0170a1cb04728da541.html</guid>
</item>

<item>
        <title><![CDATA[JS的正则表达式]]></title>
        <link><![CDATA[http://hi.baidu.com/%C6%C6%D4%C6%B5%B6/blog/item/bad40f5069570767843524e3.html]]></link>
        <description><![CDATA[
		
		<p>//校验是否全由数字组成<br>
function isDigit(s)<br>
{<br>
var patrn=/^[0-9]{1,20}$/;<br>
if (!patrn.exec(s)) return false<br>
return true<br>
}</p>
<p>//校验登录名：只能输入5-20个以字母开头、可带数字、&ldquo;_&rdquo;、&ldquo;.&rdquo;的字串<br>
function isRegisterUserName(s)<br>
{<br>
var patrn=/^[a-zA-Z]{1}([a-zA-Z0-9]|[._]){4,19}$/;<br>
if (!patrn.exec(s)) return false<br>
return true<br>
}</p>
<p>//校验用户姓名：只能输入1-30个以字母开头的字串<br>
function isTrueName(s)<br>
{<br>
var patrn=/^[a-zA-Z]{1,30}$/;<br>
if (!patrn.exec(s)) return false<br>
return true<br>
}</p>
<p>//校验密码：只能输入6-20个字母、数字、下划线<br>
function isPasswd(s)<br>
{<br>
var patrn=/^(\w){6,20}$/;<br>
if (!patrn.exec(s)) return false<br>
return true<br>
}</p>
<p>//校验普通电话、传真号码：可以&ldquo;+&rdquo;开头，除数字外，可含有&ldquo;-&rdquo;<br>
function isTel(s)<br>
{<br>
//var patrn=/^[+]{0,1}(\d){1,3}[ ]?([-]?(\d){1,12})+$/;<br>
var patrn=/^[+]{0,1}(\d){1,3}[ ]?([-]?((\d)|[ ]){1,12})+$/;<br>
if (!patrn.exec(s)) return false<br>
return true<br>
}</p>
<p>//校验手机号码：必须以数字开头，除数字外，可含有&ldquo;-&rdquo;<br>
function isMobil(s)<br>
{<br>
var patrn=/^[+]{0,1}(\d){1,3}[ ]?([-]?((\d)|[ ]){1,12})+$/;<br>
if (!patrn.exec(s)) return false<br>
return true<br>
}</p>
<p>//校验邮政编码<br>
function isPostalCode(s)<br>
{<br>
//var patrn=/^[a-zA-Z0-9]{3,12}$/;<br>
var patrn=/^[a-zA-Z0-9 ]{3,12}$/;<br>
if (!patrn.exec(s)) return false<br>
return true<br>
}</p>
<p>//校验搜索关键字<br>
function isSearch(s)<br>
{<br>
var patrn=/^[^`~!@#$%^&amp;*()+=|\\\][\]\{\}:;'\,.&lt;&gt;/?]{1}[^`~!@$%^&amp;()+=|\\\][\]\{\}:;'\,.&lt;&gt;?]{0,19}$/;<br>
if (!patrn.exec(s)) return false<br>
return true<br>
}</p>
<p>function isIP(s) //by zergling<br>
{<br>
var patrn=/^[0-9.]{1,20}$/;<br>
if (!patrn.exec(s)) return false<br>
return true<br>
}</p>
<p><br>
正则表达式<br>
&quot;^\\d+$&quot;　　//非负整数（正整数 + 0）<br>
&quot;^[0-9]*[1-9][0-9]*$&quot;　　//正整数 <br>
&quot;^((-\\d+)|(0+))$&quot;　　//非正整数（负整数 + 0） <br>
&quot;^-[0-9]*[1-9][0-9]*$&quot;　　//负整数 <br>
&quot;^-?\\d+$&quot;　　　　//整数 <br>
&quot;^\\d+(<a href="file://.//d+)?$">\\.\\d+)?$</a>&quot;　　//非负浮点数（正浮点数 + 0） <br>
&quot;^(([0-9]+\\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\\.[0-9]+)|([0-9]*[1-9][0-9]*))$&quot;　　//正浮点数 <br>
&quot;^((-\\d+(<a href="file://.//d+)?)%7C(0+(//.0+)?))$">\\.\\d+)?)|(0+(\\.0+)?))$</a>&quot;　　//非正浮点数（负浮点数 + 0） <br>
&quot;^(-(([0-9]+\\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\\.[0-9]+)|([0-9]*[1-9][0-9]*)))$&quot;　　//负浮点数 <br>
&quot;^(-?\\d+)(<a href="file://.//d+)?$">\\.\\d+)?$</a>&quot;　　//浮点数 <br>
&quot;^[A-Za-z]+$&quot;　　//由26个英文字母组成的字符串 <br>
&quot;^[A-Z]+$&quot;　　//由26个英文字母的大写组成的字符串 <br>
&quot;^[a-z]+$&quot;　　//由26个英文字母的小写组成的字符串 <br>
&quot;^[A-Za-z0-9]+$&quot;　　//由数字和26个英文字母组成的字符串 <br>
&quot;^\\w+$&quot;　　//由数字、26个英文字母或者下划线组成的字符串 <br>
&quot;^[\\w-]+(<a href="file://.[//w-]+)*@[//w-]+(//.[//w-]+)+$">\\.[\\w-]+)*@[\\w-]+(\\.[\\w-]+)+$</a>&quot;　　　　//email地址 <br>
&quot;^[a-zA-z]+://(<a href="file://w+(-//w+)*)(//.(//w+(-//w+)*))*(//?//S*)?$">\\w+(-\\w+)*)(\\.(\\w+(-\\w+)*))*(\\?\\S*)?$</a>&quot;　　//url</p>
<p>&quot;^[A-Za-z0-9_]*$&quot;</p>
<p><br>
正则表达式使用详解</p>
<p>简介 <br>
简单的说，正则表达式是一种可以用于模式匹配和替换的强有力的工具。其作用如下：<br>
测试字符串的某个模式。例如，可以对一个输入字符串进行测试，看在该字符串是否存在一个电话号码模式或一个信用卡号码模式。这称为数据有效性验证。 <br>
替换文本。可以在文档中使用一个正则表达式来标识特定文字，然后可以全部将其删除，或者替换为别的文字。 <br>
根据模式匹配从字符串中提取一个子字符串。可以用来在文本或输入字段中查找特定文字。</p>
<p>基本语法 <br>
在对正则表达式的功能和作用有了初步的了解之后，我们就来具体看一下正则表达式的语法格式。 <br>
正则表达式的形式一般如下：　　<br>
/love/　　其中位于&ldquo;/&rdquo;定界符之间的部分就是将要在目标对象中进行匹配的模式。用户只要把希望查找匹配对象的模式内容放入&ldquo;/&rdquo;定界符之间即可。为了能够使用户更加灵活的定制模式内容，正则表达式提供了专门的&ldquo;元字符&rdquo;。所谓元字符就是指那些在正则表达式中具有特殊意义的专用字符，可以用来规定其前导字符（即位于元字符前面的字符）在目标对象中的出现模式。 <br>
较为常用的元字符包括： &ldquo;+&rdquo;， &ldquo;*&rdquo;，以及 &ldquo;?&rdquo;。<br>
&ldquo;+&rdquo;元字符规定其前导字符必须在目标对象中连续出现一次或多次。<br>
&ldquo;*&rdquo;元字符规定其前导字符必须在目标对象中出现零次或连续多次。<br>
&ldquo;?&rdquo;元字符规定其前导对象必须在目标对象中连续出现零次或一次。<br>
下面，就让我们来看一下正则表达式元字符的具体应用。 <br>
/fo+/　　因为上述正则表达式中包含&ldquo;+&rdquo;元字符，表示可以与目标对象中的 &ldquo;fool&rdquo;, &ldquo;fo&rdquo;, 或者 &ldquo;football&rdquo;等在字母f后面连续出现一个或多个字母o的字符串相匹配。 <br>
/eg*/　　因为上述正则表达式中包含&ldquo;*&rdquo;元字符，表示可以与目标对象中的 &ldquo;easy&rdquo;, &ldquo;ego&rdquo;, 或者 &ldquo;egg&rdquo;等在字母e后面连续出现零个或多个字母g的字符串相匹配。 <br>
/Wil?/　　因为上述正则表达式中包含&ldquo;？&rdquo;元字符，表示可以与目标对象中的 &ldquo;Win&rdquo;, 或者&ldquo;Wilson&rdquo;,等在字母i后面连续出现零个或一个字母l的字符串相匹配。 <br>
有时候不知道要匹配多少字符。为了能适应这种不确定性，正则表达式支持限定符的概念。这些限定符可以指定正则表达式的一个给定组件必须要出现多少次才能满足匹配。<br>
{n} n 是一个非负整数。匹配确定的 n 次。例如，'o{2}' 不能匹配 &quot;Bob&quot; 中的 'o'，但是能匹配 &quot;food&quot; 中的两个 o。<br>
{n,} n 是一个非负整数。至少匹配 n 次。例如，'o{2,}' 不能匹配 &quot;Bob&quot; 中的 'o'，但能匹配 &quot;foooood&quot; 中的所有 o。'o{1,}' 等价于 'o+'。'o{0,}' 则等价于 'o*'。<br>
{n,m} m 和 n 均为非负整数，其中n &lt;= m。最少匹配 n 次且最多匹配 m 次。例如，&quot;o{1,3}&quot; 将匹配 &quot;fooooood&quot; 中的前三个 o。'o{0,1}' 等价于 'o?'。请注意在逗号和两个数之间不能有空格。</p>
<p>除了元字符之外，用户还可以精确指定模式在匹配对象中出现的频率。例如，/jim {2,6}/ 上述正则表达式规定字符m可以在匹配对象中连续出现2-6次，因此，上述正则表达式可以同jimmy或jimmmmmy等字符串相匹配。 <br>
在对如何使用正则表达式有了初步了解之后，我们来看一下其它几个重要的元字符的使用方式。 <br>
\s：用于匹配单个空格符，包括tab键和换行符； <br>
\S：用于匹配除单个空格符之外的所有字符； <br>
\d：用于匹配从0到9的数字； <br>
\w：用于匹配字母，数字或下划线字符； <br>
\W：用于匹配所有与\w不匹配的字符； <br>
. ：用于匹配除换行符之外的所有字符。 <br>
（说明：我们可以把\s和\S以及\w和\W看作互为逆运算） <br>
下面，我们就通过实例看一下如何在正则表达式中使用上述元字符。 <br>
/\s+/ 上述正则表达式可以用于匹配目标对象中的一个或多个空格字符。 <br>
/\d000/　如果我们手中有一份复杂的财务报表，那么我们可以通过上述正则表达式轻而易举的查找到所有总额达千元的款项。 <br>
除了我们以上所介绍的元字符之外，正则表达式中还具有另外一种较为独特的专用字符，即定位符。定位符用于规定匹配模式在目标对象中的出现位置。 较为常用的定位符包括： &ldquo;^&rdquo;, &ldquo;$&rdquo;, &ldquo;\b&rdquo; 以及 &ldquo;\B&rdquo;。<br>
&ldquo;^&rdquo;定位符规定匹配模式必须出现在目标字符串的开头<br>
&ldquo;$&rdquo;定位符规定匹配模式必须出现在目标对象的结尾<br>
&ldquo;\b&rdquo;定位符规定匹配模式必须出现在目标字符串的开头或结尾的两个边界之一<br>
&ldquo;\B&rdquo;定位符则规定匹配对象必须位于目标字符串的开头和结尾两个边界之内，即匹配对象既不能作为目标字符串的开头，也不能作为目标字符串的结尾。同样，我们也可以把&ldquo;^&rdquo;和&ldquo;$&rdquo;以及&ldquo;\b&rdquo;和&ldquo;\B&rdquo;看作是互为逆运算的两组定位符。举例来说： /^hell/　因为上述正则表达式中包含&ldquo;^&rdquo;定位符，所以可以与目标对象中以 &ldquo;hell&rdquo;, &ldquo;hello&rdquo;或&ldquo;hellhound&rdquo;开头的字符串相匹配。 /ar$/　因为上述正则表达式中包含&ldquo;$&rdquo;定位符，所以可以与目标对象中以 &ldquo;car&rdquo;, &ldquo;bar&rdquo;或 &ldquo;ar&rdquo; 结尾的字符串相匹配。 /\bbom/　因为上述正则表达式模式以&ldquo;\b&rdquo;定位符开头，所以可以与目标对象中以 &ldquo;bomb&rdquo;, 或 &ldquo;bom&rdquo;开头的字符串相匹配。/man\b/　因为上述正则表达式模式以&ldquo;\b&rdquo;定位符结尾，所以可以与目标对象中以 &ldquo;human&rdquo;, &ldquo;woman&rdquo;或 &ldquo;man&rdquo;结尾的字符串相匹配。 <br>
为了能够方便用户更加灵活的设定匹配模式，正则表达式允许使用者在匹配模式中指定某一个范围而不局限于具体的字符。例如： <br>
/[A-Z]/　　上述正则表达式将会与从A到Z范围内任何一个大写字母相匹配。<br>
/[a-z]/　　上述正则表达式将会与从a到z范围内任何一个小写字母相匹配。 <br>
/[0-9]/ 　上述正则表达式将会与从0到9范围内任何一个数字相匹配。 <br>
/([a-z][A-Z][0-9])+/　　上述正则表达式将会与任何由字母和数字组成的字符串，如 &ldquo;aB0&rdquo; 等相匹配。这里需要提醒用户注意的一点就是可以在正则表达式中使用 &ldquo;()&rdquo; 把字符串组合在一起。&ldquo;()&rdquo;符号包含的内容必须同时出现在目标对象中。因此，上述正则表达式将无法与诸如 &ldquo;abc&rdquo;等的字符串匹配，因为&ldquo;abc&rdquo;中的最后一个字符为字母而非数字。 <br>
如果我们希望在正则表达式中实现类似编程逻辑中的&ldquo;或&rdquo;运算，在多个不同的模式中任选一个进行匹配的话，可以使用管道符 &ldquo;|&rdquo;。例如：/to|too|2/　上述正则表达式将会与目标对象中的 &ldquo;to&rdquo;, &ldquo;too&rdquo;, 或 &ldquo;2&rdquo; 相匹配。<br>
正则表达式中还有一个较为常用的运算符，即否定符 &ldquo;[^]&rdquo;。与我们前文所介绍的定位符 &ldquo;^&rdquo; 不同，否定符 &ldquo;[^]&rdquo;规定目标对象中不能存在模式中所规定的字符串。例如：/[^A-C]/　上述字符串将会与目标对象中除A，B，和C之外的任何字符相匹配。一般来说，当&ldquo;^&rdquo;出现在 &ldquo;[]&rdquo;内时就被视做否定运算符；而当&ldquo;^&rdquo;位于&ldquo;[]&rdquo;之外，或没有&ldquo;[]&rdquo;时，则应当被视做定位符。<br>
最后，当用户需要在正则表达式的模式中加入元字符，并查找其匹配对象时，可以使用转义符&ldquo;\&rdquo;。例如：/Th\*/ 　上述正则表达式将会与目标对象中的&ldquo;Th*&rdquo;而非&ldquo;The&rdquo;等相匹配。<br>
在构造正则表达式之后，就可以象数学表达式一样来求值，也就是说，可以从左至右并按照一个优先级顺序来求值。优先级如下：<br>
1．\ 转义符<br>
2．(), (?:), (?=), [] 圆括号和方括号<br>
3．*, +, ?, {n}, {n,}, {n,m} 限定符<br>
4．^, $, \anymetacharacter 位置和顺序<br>
5．|&ldquo;或&rdquo;操作</p>
<p><br>
使用实例 <br>
在JavaScript 1.2中带有一个功能强大的RegExp()对象，可以用来进行正则表达式的匹配操作。其中的test()方法可以检验目标对象中是否包含匹配模式，并相应的返回true或false。<br>
我们可以使用JavaScript编写以下脚本，验证用户输入的邮件地址的有效性。<br>
-------------------------------------------------------- <br>
&lt;html&gt; <br>
&lt;head&gt; <br>
　 &lt;script language=&quot;Javascript1.2&quot;&gt; <br>
　　　　 &lt;!-- start hiding <br>
　　　　 function verifyAddress(obj) <br>
　　　　　{ <br>
　　　　　　var email = obj.email.value; <br>
　　　　　　var pattern = <br>
/^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(\.[a-zA-Z0-9_-])+/; <br>
　　　　　　flag = pattern.test(email); <br>
　　　　　　if(flag) <br>
　　　　　　{ <br>
　　　　　　　alert(&ldquo;Your email address is correct!&rdquo;); <br>
　　　　　　　return true; <br>
　　　　　　} <br>
　　　　　　else <br>
　　　　　　　{ <br>
　　　　　　　　alert(&ldquo;Please try again!&rdquo;); <br>
　　　　　　　　return false; <br>
　　　　　　　 } <br>
　　　　　 } <br>
　　　　 // stop hiding --&gt; <br>
　　　 &lt;/script&gt; <br>
　　&lt;/head&gt; <br>
　 &lt;body&gt; <br>
　　 &lt;form onSubmit=&quot;return verifyAddress(this);&quot;&gt; <br>
　　　 &lt;input name=&quot;email&quot; type=&quot;text&quot;&gt; <br>
　　　 &lt;input type=&quot;submit&quot;&gt; <br>
　　　 &lt;/form&gt; <br>
　　&lt;/body&gt; <br>
&lt;/html&gt; <br>
--------------------------------------------------------</p>
<p>正则表达式对象<br>
本对象包含正则表达式模式以及表明如何应用模式的标志。<br>
语法 1 re = /pattern/[flags]<br>
语法 2 re = new RegExp(&quot;pattern&quot;,[&quot;flags&quot;]) <br>
参数<br>
re<br>
必选项。将要赋值为正则表达式模式的变量名。 <br>
Pattern<br>
必选项。要使用的正则表达式模式。如果使用语法 1，用 &quot;/&quot; 字符分隔模式。如果用语法 2，用引号将模式引起来。</p>
<p>Flags <br>
可选项。如果使用语法 2 要用引号将 flag 引起来。标志可以组合使用，可用的有： <br>
g （全文查找出现的所有 pattern） <br>
i （忽略大小写） <br>
m （多行查找） <br>
示例<br>
下面的示例创建一个包含正则表达式模式及相关标志的对象(re)，向您演示正则表达式对象的用法。在本例中，作为结果的正则表达式对象又用于 match 方法中：<br>
function MatchDemo()<br>
{<br>
var r, re; // 声明变量。<br>
var s = &quot;The rain in Spain falls mainly in the plain&quot;;<br>
re = new RegExp(&quot;ain&quot;,&quot;g&quot;); // 创建正则表达式对象。<br>
r = s.match(re); // 在字符串 s 中查找匹配。<br>
return(r); <br>
}<br>
返回值： ain,ain,ain,ain<br>
属性 lastIndex 属性 | source 属性<br>
方法 compile 方法 | exec 方法 | test 方法<br>
要求 版本 3<br>
请参阅 RegExp 对象 | 正则表达式语法 | String 对象</p>
<p>exec 方法<br>
用正则表达式模式在字符串中运行查找，并返回包含该查找结果的一个数组。<br>
rgExp.exec(str)<br>
参数<br>
rgExp <br>
必选项。包含正则表达式模式和可用标志的正则表达式对象。 <br>
str <br>
必选项。要在其中执行查找的 String 对象或字符串文字。 <br>
说明<br>
如果 exec 方法没有找到匹配，则它返回 null。如果它找到匹配，则 exec 方法返回一个数组，并且更新全局 RegExp 对象的属性，以反映匹配结果。数组的0元素包含了完整的匹配，而第1到n元素中包含的是匹配中出现的任意一个子匹配。这相当于没有设置全局标志 (g) 的 match 方法。<br>
如果为正则表达式设置了全局标志，exec 从以 lastIndex 的值指示的位置开始查找。如果没有设置全局标志，exec 忽略 lastIndex 的值，从字符串的起始位置开始搜索。<br>
exec 方法返回的数组有三个属性，分别是 input、index 和 lastIndex。Input 属性包含了整个被查找的字符串。Index 属性中包含了整个被查找字符串中被匹配的子字符串的位置。LastIndex 属性中包含了匹配中最后一个字符的下一个位置。<br>
示例<br>
下面的例子举例说明了 exec 方法的用法：<br>
function RegExpTest()<br>
{<br>
var ver = Number(ScriptEngineMajorVersion() + &quot;.&quot; + ScriptEngineMinorVersion())<br>
if (ver &gt;= 5.5){ // 测试 JScript 的版本。<br>
var src = &quot;The rain in Spain falls mainly in the plain.&quot;;<br>
var re = /\w+/g; // 创建正则表达式模式。<br>
var arr;<br>
while ((arr = re.exec(src)) != null)<br>
document.write(arr.index + &quot;-&quot; + arr.lastIndex + arr + &quot;\t&quot;);<br>
}<br>
else{<br>
alert(&quot;请使用 JScript 的更新版本&quot;);<br>
}<br>
}<br>
返回值：0-3The 4-8rain 9-11in 12-17Spain 18-23falls 24-30mainly 31-33in 34-37the 38-43plain<br>
test 方法<br>
返回一个 Boolean 值，它指出在被查找的字符串中是否存在模式。<br>
rgexp.test(str) <br>
参数<br>
rgexp<br>
必选项。包含正则表达式模式或可用标志的正则表达式对象。 <br>
str <br>
必选项。要在其上测试查找的字符串。 <br>
说明<br>
test 方法检查在字符串中是否存在一个模式，如果存在则返回 true，否则就返回 false。<br>
全局 RegExp 对象的属性不由 test 方法来修改。<br>
示例<br>
下面的例子举例说明了 test 方法的用法：<br>
function TestDemo(re, s)<br>
{<br>
var s1; // 声明变量。<br>
// 检查字符串是否存在正则表达式。<br>
if (re.test(s)) // 测试是否存在。<br>
s1 = &quot; contains &quot;; // s 包含模式。<br>
else<br>
s1 = &quot; does not contain &quot;; // s 不包含模式。<br>
return(&quot;'&quot; + s + &quot;'&quot; + s1 + &quot;'&quot;+ re.source + &quot;'&quot;); // 返回字符串。<br>
}<br>
函数调用：document.write (TestDemo(/ain+/ ,&quot;The rain in Spain falls mainly in the plain.&quot;));<br>
返回值：'The rain in Spain falls mainly in the plain.' contains 'ain+'<br>
match 方法<br>
使用正则表达式模式对字符串执行查找，并将包含查找的结果作为数组返回。<br>
stringObj.match(rgExp) <br>
参数<br>
stringObj <br>
必选项。对其进行查找的 String 对象或字符串文字。 <br>
rgExp <br>
必选项。为包含正则表达式模式和可用标志的正则表达式对象。也可以是包含正则表达式模式和可用标志的变量名或字符串文字。 <br>
说明<br>
如果 match 方法没有找到匹配，返回 null。如果找到匹配返回一个数组并且更新全局 RegExp 对象的属性以反映匹配结果。<br>
match 方法返回的数组有三个属性：input、index 和 lastIndex。Input 属性包含整个的被查找字符串。Index 属性包含了在整个被查找字符串中匹配的子字符串的位置。LastIndex 属性包含了最后一次匹配中最后一个字符的下一个位置。<br>
如果没有设置全局标志 (g)，数组的 0 元素包含整个匹配，而第 1 到 n 元素包含了匹配中曾出现过的任一个子匹配。这相当于没有设置全局标志的 exec 方法。如果设置了全局标志，元素 0 到 n 中包含所有匹配。<br>
示例<br>
下面的示例演示了match 方法的用法：<br>
function MatchDemo()<br>
{<br>
var r, re; // 声明变量。<br>
var s = &quot;The rain in Spain falls mainly in the plain&quot;;<br>
re = /ain/i; // 创建正则表达式模式。<br>
r = s.match(re); // 尝试匹配搜索字符串。<br>
return(r); // 返回第一次出现 &quot;ain&quot; 的地方。<br>
}<br>
返回值：ain<br>
本示例说明带 g 标志设置的 match 方法的用法。<br>
function MatchDemo()<br>
{<br>
var r, re; // 声明变量。<br>
var s = &quot;The rain in Spain falls mainly in the plain&quot;;<br>
re = /ain/ig; // 创建正则表达式模式。<br>
r = s.match(re); // 尝试去匹配搜索字符串。<br>
return(r); // 返回的数组包含了所有 &quot;ain&quot; <br>
// 出现的四个匹配。<br>
}<br>
返回值：ain,ain,ain,ain<br>
上面几行代码演示了字符串文字的 match 方法的用法。<br>
var r, re = &quot;Spain&quot;;<br>
r = &quot;The rain in Spain&quot;.replace(re, &quot;Canada&quot;);<br>
return r;<br>
返回值：The rain in Canada<br>
search 方法<br>
返回与正则表达式查找内容匹配的第一个子字符串的位置。<br>
stringObj.search(rgExp)<br>
参数<br>
stringObj <br>
必选项。要在其上进行查找的 String 对象或字符串文字。 <br>
rgExp <br>
必选项。包含正则表达式模式和可用标志的正则表达式对象。 <br>
说明<br>
search 方法指明是否存在相应的匹配。如果找到一个匹配，search 方法将返回一个整数值，指明这个匹配距离字符串开始的偏移位置。如果没有找到匹配，则返回 -1。<br>
示例<br>
下面的示例演示了 search 方法的用法。<br>
function SearchDemo()<br>
{<br>
var r, re; // 声明变量。<br>
var s = &quot;The rain in Spain falls mainly in the plain.&quot;;<br>
re = /falls/i; // 创建正则表达式模式。<br>
r = s.search(re); // 查找字符串。<br>
return(r); // 返回 Boolean 结果。<br>
}<br>
返回值：18</p>
<p><br>
正则表达式语法<br>
一个正则表达式就是由普通字符（例如字符 a 到 z）以及特殊字符（称为元字符）组成的文字模式。该模式描述在查找文字主体时待匹配的一个或多个字符串。正则表达式作为一个模板，将某个字符模式与所搜索的字符串进行匹配。</p>
<p>这里有一些可能会遇到的正则表达式示例：</p>
<p>JScript VBScript 匹配 <br>
/^\[ \t]*$/ &quot;^\[ \t]*$&quot; 匹配一个空白行。 <br>
/\d{2}-\d{5}/ &quot;\d{2}-\d{5}&quot; 验证一个ID 号码是否由一个2位数字，一个连字符以及一个5位数字组成。 <br>
/&lt;(.*)&gt;.*&lt;\/\1&gt;/ &quot;&lt;(.*)&gt;.*&lt;\/\1&gt;&quot; 匹配一个 HTML 标记。</p>
<p><br>
下表是元字符及其在正则表达式上下文中的行为的一个完整列表：</p>
<p>字符 描述 <br>
\ 将下一个字符标记为一个特殊字符、或一个原义字符、或一个 后向引用、或一个八进制转义符。例如，'n' 匹配字符 &quot;n&quot;。'\n' 匹配一个换行符。序列 '\\' 匹配 &quot;\&quot; 而 &quot;\(&quot; 则匹配 &quot;(&quot;。 <br>
^ 匹配输入字符串的开始位置。如果设置了 RegExp 对象的 Multiline 属性，^ 也匹配 '\n' 或 '\r' 之后的位置。 <br>
$ 匹配输入字符串的结束位置。如果设置了RegExp 对象的 Multiline 属性，$ 也匹配 '\n' 或 '\r' 之前的位置。 <br>
* 匹配前面的子表达式零次或多次。例如，zo* 能匹配 &quot;z&quot; 以及 &quot;zoo&quot;。 * 等价于{0,}。 <br>
+ 匹配前面的子表达式一次或多次。例如，'zo+' 能匹配 &quot;zo&quot; 以及 &quot;zoo&quot;，但不能匹配 &quot;z&quot;。+ 等价于 {1,}。 <br>
? 匹配前面的子表达式零次或一次。例如，&quot;do(es)?&quot; 可以匹配 &quot;do&quot; 或 &quot;does&quot; 中的&quot;do&quot; 。? 等价于 {0,1}。 <br>
{n} n 是一个非负整数。匹配确定的 n 次。例如，'o{2}' 不能匹配 &quot;Bob&quot; 中的 'o'，但是能匹配 &quot;food&quot; 中的两个 o。 <br>
{n,} n 是一个非负整数。至少匹配n 次。例如，'o{2,}' 不能匹配 &quot;Bob&quot; 中的 'o'，但能匹配 &quot;foooood&quot; 中的所有 o。'o{1,}' 等价于 'o+'。'o{0,}' 则等价于 'o*'。 <br>
{n,m} m 和 n 均为非负整数，其中n &lt;= m。最少匹配 n 次且最多匹配 m 次。刘， &quot;o{1,3}&quot; 将匹配 &quot;fooooood&quot; 中的前三个 o。'o{0,1}' 等价于 'o?'。请注意在逗号和两个数之间不能有空格。 <br>
? 当该字符紧跟在任何一个其他限制符 (*, +, ?, {n}, {n,}, {n,m}) 后面时，匹配模式是非贪婪的。非贪婪模式尽可能少的匹配所搜索的字符串，而默认的贪婪模式则尽可能多的匹配所搜索的字符串。例如，对于字符串 &quot;oooo&quot;，'o+?' 将匹配单个 &quot;o&quot;，而 'o+' 将匹配所有 'o'。 <br>
. 匹配除 &quot;\n&quot; 之外的任何单个字符。要匹配包括 '\n' 在内的任何字符，请使用象 '[.\n]' 的模式。 <br>
(pattern) 匹配pattern 并获取这一匹配。所获取的匹配可以从产生的 Matches 集合得到，在VBScript 中使用 SubMatches 集合，在JScript 中则使用 $0…$9 属性。要匹配圆括号字符，请使用 '\(' 或 '\)'。 <br>
(?:pattern) 匹配 pattern 但不获取匹配结果，也就是说这是一个非获取匹配，不进行存储供以后使用。这在使用 &quot;或&quot; 字符 (|) 来组合一个模式的各个部分是很有用。例如， 'industr(?:y|ies) 就是一个比 'industry|industries' 更简略的表达式。 <br>
(?=pattern) 正向预查，在任何匹配 pattern 的字符串开始处匹配查找字符串。这是一个非获取匹配，也就是说，该匹配不需要获取供以后使用。例如， 'Windows (?=95|98|NT|2000)' 能匹配 &quot;Windows 2000&quot; 中的 &quot;Windows&quot; ，但不能匹配 &quot;Windows 3.1&quot; 中的 &quot;Windows&quot;。预查不消耗字符，也就是说，在一个匹配发生后，在最后一次匹配之后立即开始下一次匹配的搜索，而不是从包含预查的字符之后开始。 <br>
(?!pattern) 负向预查，在任何不匹配Negative lookahead matches the search string at any point where a string not matching pattern 的字符串开始处匹配查找字符串。这是一个非获取匹配，也就是说，该匹配不需要获取供以后使用。例如'Windows (?!95|98|NT|2000)' 能匹配 &quot;Windows 3.1&quot; 中的 &quot;Windows&quot;，但不能匹配 &quot;Windows 2000&quot; 中的 &quot;Windows&quot;。预查不消耗字符，也就是说，在一个匹配发生后，在最后一次匹配之后立即开始下一次匹配的搜索，而不是从包含预查的字符之后开始 <br>
x|y 匹配 x 或 y。例如，'z|food' 能匹配 &quot;z&quot; 或 &quot;food&quot;。'(z|f)ood' 则匹配 &quot;zood&quot; 或 &quot;food&quot;。 <br>
[xyz] 字符集合。匹配所包含的任意一个字符。例如， '[abc]' 可以匹配 &quot;plain&quot; 中的 'a'。 <br>
[^xyz] 负值字符集合。匹配未包含的任意字符。例如， '[^abc]' 可以匹配 &quot;plain&quot; 中的'p'。 <br>
[a-z] 字符范围。匹配指定范围内的任意字符。例如，'[a-z]' 可以匹配 'a' 到 'z' 范围内的任意小写字母字符。 <br>
[^a-z] 负值字符范围。匹配任何不在指定范围内的任意字符。例如，'[^a-z]' 可以匹配任何不在 'a' 到 'z' 范围内的任意字符。 <br>
\b 匹配一个单词边界，也就是指单词和空格间的位置。例如， 'er\b' 可以匹配&quot;never&quot; 中的 'er'，但不能匹配 &quot;verb&quot; 中的 'er'。 <br>
\B 匹配非单词边界。'er\B' 能匹配 &quot;verb&quot; 中的 'er'，但不能匹配 &quot;never&quot; 中的 'er'。 <br>
\cx 匹配由x指明的控制字符。例如， \cM 匹配一个 Control-M 或回车符。 x 的值必须为 A-Z 或 a-z 之一。否则，将 c 视为一个原义的 'c' 字符。 <br>
\d 匹配一个数字字符。等价于 [0-9]。 <br>
\D 匹配一个非数字字符。等价于 [^0-9]。 <br>
\f 匹配一个换页符。等价于 \x0c 和 \cL。 <br>
\n 匹配一个换行符。等价于 \x0a 和 \cJ。 <br>
\r 匹配一个回车符。等价于 \x0d 和 \cM。 <br>
\s 匹配任何空白字符，包括空格、制表符、换页符等等。等价于 [ \f\n\r\t\v]。 <br>
\S 匹配任何非空白字符。等价于 [^ \f\n\r\t\v]。 <br>
\t 匹配一个制表符。等价于 \x09 和 \cI。 <br>
\v 匹配一个垂直制表符。等价于 \x0b 和 \cK。 <br>
\w 匹配包括下划线的任何单词字符。等价于'[A-Za-z0-9_]'。 <br>
\W 匹配任何非单词字符。等价于 '[^A-Za-z0-9_]'。 <br>
\xn 匹配 n，其中 n 为十六进制转义值。十六进制转义值必须为确定的两个数字长。例如， '\x41' 匹配 &quot;A&quot;。'\x041' 则等价于 '\x04' &amp; &quot;1&quot;。正则表达式中可以使用 ASCII 编码。. <br>
\num 匹配 num，其中 num 是一个正整数。对所获取的匹配的引用。例如，'(.)\1' 匹配两个连续的相同字符。 <br>
\n 标识一个八进制转义值或一个后向引用。如果 \n 之前至少 n 个获取的子表达式，则 n 为后向引用。否则，如果 n 为八进制数字 (0-7)，则 n 为一个八进制转义值。 <br>
\nm 标识一个八进制转义值或一个后向引用。如果 \nm 之前至少有is preceded by at least nm 个获取得子表达式，则 nm 为后向引用。如果 \nm 之前至少有 n 个获取，则 n 为一个后跟文字 m 的后向引用。如果前面的条件都不满足，若 n 和 m 均为八进制数字 (0-7)，则 \nm 将匹配八进制转义值 nm。 <br>
\nml 如果 n 为八进制数字 (0-3)，且 m 和 l 均为八进制数字 (0-7)，则匹配八进制转义值 nml。 <br>
\un 匹配 n，其中 n 是一个用四个十六进制数字表示的 Unicode 字符。例如， \u00A9 匹配版权符号 (?)。</p>
<p><br>
优先权顺序<br>
在构造正则表达式之后，就可以象数学表达式一样来求值，也就是说，可以从左至右并按照一个优先权顺序来求值。</p>
<p>下表从最高优先级到最低优先级列出各种正则表达式操作符的优先权顺序：</p>
<p>操作符 描述 <br>
\ 转义符 <br>
(), (?:), (?=), [] 圆括号和方括号 <br>
*, +, ?, {n}, {n,}, {n,m} 限定符 <br>
^, $, \anymetacharacter 位置和顺序 <br>
| &ldquo;或&rdquo;操作</p>
<p><br>
普通字符<br>
普通字符由所有那些未显式指定为元字符的打印和非打印字符组成。这包括所有的大写和小写字母字符，所有数字，所有标点符号以及一些符号。</p>
<p>最简单的正则表达式是一个单独的普通字符，可以匹配所搜索字符串中的该字符本身。例如，单字符模式 'A' 可以匹配所搜索字符串中任何位置出现的字母 'A'。这里有一些单字符正则表达式模式的示例：</p>
<p>/a/<br>
/7/<br>
/M/<br>
等价的 VBScript 单字符正则表达式为：</p>
<p>&quot;a&quot;<br>
&quot;7&quot;<br>
&quot;M&quot;<br>
可以将多个单字符组合在一起得到一个较大的表达式。例如，下面的 JScript 正则表达式不是别的，就是通过组合单字符表达式 'a'、'7'以及 'M' 所创建出来的一个表达式。</p>
<p>/a7M/<br>
等价的 VBScript 表达式为：</p>
<p>&quot;a7M&quot;<br>
请注意这里没有连接操作符。所需要做的就是将一个字符放在了另一个字符后面。</p> <a href="http://hi.baidu.com/%C6%C6%D4%C6%B5%B6/blog/item/bad40f5069570767843524e3.html">阅读全文</a>
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/%C6%C6%D4%C6%B5%B6/blog/category/Js">Js</a>&nbsp;<a href="http://hi.baidu.com/%C6%C6%D4%C6%B5%B6/blog/item/bad40f5069570767843524e3.html#comment">查看评论</a>]]></description>
        <pubDate>2008-06-28  19:31</pubDate>
        <category><![CDATA[Js]]></category>
        <author><![CDATA[破云刀]]></author>
		<guid>http://hi.baidu.com/%C6%C6%D4%C6%B5%B6/blog/item/bad40f5069570767843524e3.html</guid>
</item>

<item>
        <title><![CDATA[java文件操作大全(二)]]></title>
        <link><![CDATA[http://hi.baidu.com/%C6%C6%D4%C6%B5%B6/blog/item/a7e3dffb534f1561024f56f0.html]]></link>
        <description><![CDATA[
		
		<strong>一行一行读取数据</strong> <br>
<font face="Arial"><code>＜%@ page contentType=&quot;text/html;charset=gb2312&quot;%&gt; <br>
＜%@ page import=&quot;java.io.*&quot;%&gt; <br>
＜html&gt; <br>
＜head&gt; <br>
＜title&gt;文件读取＜/title&gt; <br>
＜/head&gt; <br>
＜body&gt; <br>
＜% <br>
String path=request.getRealPath(&quot;&quot;);//取得当前目录的路径 <br>
FileReader fr=new FileReader(path + &quot;\\file\\inc\\t.txt&quot;);//建立FileReader对象，并实例化为fr <br>
BufferedReader br=new BufferedReader(fr);//建立BufferedReader对象，并实例化为br <br>
String Line=br.readLine();//从文件读取一行字符串 <br>
//判断读取到的字符串是否不为空 <br>
while(Line!=null){ <br>
out.println(Line + &quot;＜br&gt;&quot;);//输出从文件中读取的数据 <br>
Line=br.readLine();//从文件中继续读取一行数据 <br>
} <br>
br.close();//关闭BufferedReader对象 <br>
fr.close();//关闭文件 <br>
%&gt; <br>
＜/body&gt; <br>
＜/html&gt; <br>
<br>
</code><br>
<strong>略过文件中的字符不读取</strong> <br>
</font><font face="Arial"><code>＜%@ page contentType=&quot;text/html;charset=gb2312&quot;%&gt; <br>
＜%@ page import=&quot;java.io.*&quot;%&gt; <br>
＜html&gt; <br>
＜head&gt; <br>
＜title&gt;略过字节不读取＜/title&gt; <br>
＜/head&gt; <br>
＜body&gt; <br>
＜% <br>
String path=request.getRealPath(&quot;.&quot;); <br>
FileReader fr=new FileReader(path + &quot;\\ReadData.txt&quot;); <br>
fr.skip(2);//跳过2个字节 <br>
int c=fr.read();//读取一个字节 <br>
while(c!=-1){ <br>
out.print((char)c); <br>
c=fr.read(); <br>
} <br>
fr.close(); <br>
%&gt; <br>
＜/body&gt; <br>
＜/html&gt; <br>
<br>
</code><br>
<strong>将数据写入文件</strong> <br>
</font><font face="Arial"><code>＜%@ page contentType=&quot;text/html;charset=gb2312&quot;%&gt; <br>
＜%@ page import=&quot;java.io.*&quot;%&gt; <br>
＜html&gt; <br>
＜head&gt; <br>
＜title&gt;将数据写入文件＜/title&gt; <br>
＜/head&gt; <br>
＜body&gt; <br>
＜% <br>
String path=request.getRealPath(&quot;.&quot;); <br>
FileWriter fw=new FileWriter(path + &quot;\\WriteData.txt&quot;);//建立FileWriter对象，并实例化fw <br>
//将字符串写入文件 <br>
fw.write(&quot;大家好！&quot;); <br>
fw.write(&quot;本书是《JSP编程技巧》&quot;); <br>
fw.write(&quot;请多多指教！&quot;); <br>
fw.write(&quot;email:stride@sina.com&quot;); <br>
fw.close(); <br>
<br>
FileReader fr=new FileReader(path + &quot;\\WriteData.txt&quot;); <br>
BufferedReader br=new BufferedReader(fr);//建立BufferedReader对象，并实例化为br <br>
String Line=br.readLine(); <br>
//读取一行数据 <br>
out.println(Line + &quot;＜br&gt;&quot;); <br>
br.close();//关闭BufferedReader对象 <br>
fr.close(); <br>
%&gt; <br>
＜/body&gt; <br>
＜/html&gt; <br>
<br>
</code><br>
<strong>将写入文件的数据分行</strong> <br>
</font><code><font face="Arial">＜%@ page contentType=&quot;text/html;charset=gb2312&quot;%&gt; <br>
＜%@ page import=&quot;java.io.*&quot;%&gt; <br>
＜html&gt; <br>
＜head&gt; <br>
＜title&gt;将写入文件的数据分行＜/title&gt; <br>
＜/head&gt; <br>
＜body&gt; <br>
＜% <br>
String path=request.getRealPath(&quot;.&quot;); <br>
FileWriter fw=new FileWriter(path + &quot;\\WriteData.txt&quot;); <br>
BufferedWriter bw=new BufferedWriter(fw); <br>
bw.write(&quot;大家好！&quot;); <br>
bw.write(&quot;本书是《JSP编程技巧》。&quot;); <br>
bw.newLine();//断行 <br>
bw.write(&quot;请多多指教！&quot;); <br>
bw.newLine();//断行 <br>
bw.write(&quot;email: stride@sina.com&quot;); <br>
bw.flush();//将数据更新至文件 <br>
fw.close();//关闭文件流 <br>
out.println(&quot;写入文件内容为：＜br&gt;&quot;); <br>
FileReader fr=new FileReader(path + &quot;\\WriteData.txt&quot;); <br>
BufferedReader br=new BufferedReader(fr); <br>
String Line=br.readLine();//读取一行数据 <br>
while(Line!=null){ <br>
out.println(Line + &quot;＜br&gt;&quot;); <br>
Line=br.readLine(); <br>
} <br>
fr.close(); <br>
%&gt; <br>
＜/body&gt; <br>
＜/html&gt; <br>
如何将数据追加写入到文件 <br>
＜%@ page contentType=&quot;text/html;charset=gb2312&quot;%&gt; <br>
＜%@ page import=&quot;java.io.*&quot;%&gt; <br>
＜html&gt; <br>
＜head&gt; <br>
＜title&gt;将写入文件的数据分行＜/title&gt; <br>
＜/head&gt; <br>
＜body&gt; <br>
＜% <br>
String path=request.getRealPath(&quot;.&quot;); <br>
RandomAccessFile rf=new RandomAccessFile(path + &quot;\\WriteData.txt&quot;,&quot;rw&quot;);//定义一个类RandomAccessFile的对象，并实例化 <br>
rf.seek(rf.length());//将指针移动到文件末尾 <br>
rf.writeBytes(&quot;\nAppend a line to the file!&quot;); <br>
rf.close();//关闭文件流 <br>
out.println(&quot;写入文件内容为：＜br&gt;&quot;); <br>
FileReader fr=new FileReader(path + &quot;\\WriteData.txt&quot;); <br>
BufferedReader br=new BufferedReader(fr);//读取文件的BufferedRead对象 <br>
String Line=br.readLine(); <br>
while(Line!=null){ <br>
out.println(Line + &quot;＜br&gt;&quot;); <br>
Line=br.readLine(); <br>
} <br>
fr.close();//关闭文件 <br>
%&gt; <br>
＜/body&gt; <br>
＜/html&gt;＜/I&gt;＜/I&gt;＜/I&gt;＜/I&gt; </font></code> <a href="http://hi.baidu.com/%C6%C6%D4%C6%B5%B6/blog/item/a7e3dffb534f1561024f56f0.html">阅读全文</a>
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/%C6%C6%D4%C6%B5%B6/blog/category/java%BC%BC%C7%C9%C0%E0">java技巧类</a>&nbsp;<a href="http://hi.baidu.com/%C6%C6%D4%C6%B5%B6/blog/item/a7e3dffb534f1561024f56f0.html#comment">查看评论</a>]]></description>
        <pubDate>2008-06-21  11:29</pubDate>
        <category><![CDATA[java技巧类]]></category>
        <author><![CDATA[破云刀]]></author>
		<guid>http://hi.baidu.com/%C6%C6%D4%C6%B5%B6/blog/item/a7e3dffb534f1561024f56f0.html</guid>
</item>

<item>
        <title><![CDATA[java文件操作大全]]></title>
        <link><![CDATA[http://hi.baidu.com/%C6%C6%D4%C6%B5%B6/blog/item/bfddc860650ae0da8cb10df0.html]]></link>
        <description><![CDATA[
		
		<strong>java文件操作大全</strong> <br>
<br>
文件的建立/检查与删除 <br>
<font face="Arial"><code>＜%@ page contentType=&quot;text/html;charset=gb2312&quot;%&gt; <br>
＜%@ page import=&quot;java.io.*&quot;%&gt; <br>
＜html&gt; <br>
＜head&gt; <br>
＜title&gt;文件的建立、检查与删除＜/title&gt; <br>
＜/head&gt; <br>
＜body&gt; <br>
＜% <br>
String path=request.getRealPath(&quot;&quot;); <br>
//out.println(path); <br>
File f=new File(path,&quot;File.txt&quot;); <br>
//out.println(f); <br>
//out.println(f.exists()); <br>
<br>
if(f.exists()){//检查File.txt是否存在 <br>
f.delete();//删除File.txt文件 <br>
out.println(path + &quot;\\File.txt 存在，已删除。&quot;); <br>
}else{ <br>
f.createNewFile();//在当前目录下建立一个名为File.txt的文件 <br>
out.println(path + &quot;\\File.txt 不存在，已建立。&quot;);//输出目前所在的目录路径 <br>
} <br>
%&gt; <br>
<br>
</code><strong>目录的建立/检查与删除</strong> <br>
</font><font face="Arial"><code>＜%@ page contentType=&quot;text/html;charset=gb2312&quot;%&gt; <br>
＜%@ page import=&quot;java.io.*&quot;%&gt; <br>
＜html&gt; <br>
＜head&gt; <br>
＜title&gt;目录的建立/检查与删除＜/title&gt; <br>
＜/head&gt; <br>
＜body&gt; <br>
＜% <br>
String path=request.getRealPath(&quot;&quot;); <br>
path=path + &quot;\\Sub&quot;;//将要建立的目录路径 <br>
File d=new File(path);//建立代表Sub目录的File对象，并得到它的一个引用 <br>
if(d.exists()){//检查Sub目录是否存在 <br>
d.delete(); <br>
out.println(&quot;Sub目录存在，已删除&quot;); <br>
}else{ <br>
d.mkdir();//建立Sub目录 <br>
out.println(&quot;Sub目录不存在，已建立&quot;); <br>
} <br>
%&gt; <br>
＜/body&gt; <br>
＜/html&gt; <br>
<br>
</code><br>
<strong>如何在JSP中处理虚拟目录</strong> <br>
</font><code><font face="Arial">＜%@ page contentType=&quot;text/html;charset=gb2312&quot;%&gt; <br>
＜%@ page import=&quot;java.io.*&quot;%&gt; <br>
＜html&gt; <br>
＜head&gt; <br>
＜title&gt;JSP中如何处理虚拟目录＜/title&gt; <br>
＜/head&gt; <br>
＜body&gt; <br>
取得虚拟目录对应的磁盘路径＜br&gt; <br>
Web站点主目录的位置为＜font color=#ff0000&gt;＜%=request.getRealPath(&quot;/&quot;)%&gt;＜/font&gt;＜br&gt; <br>
JSP网页所在的目录位置＜font color=#ff0000&gt;＜%=request.getRealPath(&quot;./&quot;)%&gt;＜/font&gt;＜br&gt; <br>
JSP网页所在目录上一层目录的位置＜font color=#ff0000&gt;＜%=request.getRealPath(&quot;../&quot;)%&gt;＜/font&gt;＜br&gt; <br>
＜/body&gt; <br>
＜/html&gt; <br>
<br>
<br>
</font><font face="Arial"><strong>文件属性的取得 <br>
</strong>＜%@ page contentType=&quot;text/html;charset=gb2312&quot;%&gt; <br>
＜%@ page import=&quot;java.util.Date,java.io.*&quot;%&gt; <br>
＜html&gt; <br>
＜head&gt; <br>
＜title&gt;文件属性的取得＜/title&gt; <br>
＜/head&gt; <br>
＜body&gt; <br>
＜% <br>
String path=request.getRealPath(&quot;/&quot;); <br>
File f=new File(path,&quot;ReadData.txt&quot;); <br>
if(f.exists()){ <br>
%&gt; <br>
＜%=f.getName()%&gt;的属性如下：＜br&gt;＜br&gt; <br>
文件长度为：＜%=f.length()%&gt; <br>
＜%=f.isFile()?&quot;是文件&quot;:&quot;不是文件&quot;%&gt;＜br&gt; <br>
＜%=f.isDirectory()?&quot;是目录&quot;:&quot;不是目录&quot;%&gt;＜br&gt; <br>
＜%=f.canRead()?&quot;可读取&quot;:&quot;不可读取&quot;%&gt;＜br&gt; <br>
＜%=f.canWrite()?&quot;可写入&quot;:&quot;不可写入&quot;%&gt;＜br&gt; <br>
＜%=f.isHidden()?&quot;是隐藏文件&quot;:&quot;不是隐藏文件&quot;%&gt;＜br&gt; <br>
文件的最后修改日期为：＜%=new Date(f.lastModified())%&gt;＜br&gt; <br>
＜% <br>
}else{ <br>
f.createNewFile();//在当前目录下建立一个名为ReaData.txt的文件 <br>
%&gt; <br>
＜%=f.getName()%&gt;的属性如下：＜br&gt;＜br&gt; <br>
文件长度为：＜%=f.length()%&gt; <br>
＜%=f.isFile()?&quot;是文件&quot;:&quot;不是文件&quot;%&gt;＜br&gt; <br>
＜%=f.isDirectory()?&quot;是目录&quot;:&quot;不是目录&quot;%&gt;＜br&gt; <br>
＜%=f.canRead()?&quot;可读取&quot;:&quot;不可读取&quot;%&gt;＜br&gt; <br>
＜%=f.canWrite()?&quot;可写入&quot;:&quot;不可写入&quot;%&gt;＜br&gt; <br>
＜%=f.isHidden()?&quot;是隐藏文件&quot;:&quot;不是隐藏文件&quot;%&gt;＜br&gt; <br>
文件的最后修改日期为：＜%=new Date(f.lastModified())%&gt;＜br&gt; <br>
＜% <br>
} <br>
%&gt; <br>
＜/body&gt; <br>
＜/html&gt; <br>
<br>
<br>
</font></code><strong>取出目录中文件的方法</strong> <br>
<font face="Arial"><code>＜%@ page contentType=&quot;text/html;charset=gb2312&quot;%&gt; <br>
＜%@ page import=&quot;java.io.*&quot;%&gt; <br>
＜html&gt; <br>
＜head&gt; <br>
＜title&gt;取出目录中文件的方法--列出目录中的文件＜/title&gt; <br>
＜/head&gt; <br>
＜body&gt; <br>
＜% <br>
String path=request.getRealPath(&quot;/&quot;); <br>
File d=new File(path);//建立当前目录中文件的File对象 <br>
File list[]=d.listFiles();//取得代表目录中所有文件的File对象数组 <br>
out.println(&quot;＜font color=#ff0000&gt;&quot; + path + &quot;目录下的文件：＜/font&gt;＜br&gt;&quot;); <br>
for(int i=0;i＜list.length;i++){ <br>
if(list＜I&gt;.isFile()){ <br>
out.println(list＜I&gt;.getName() + &quot;＜br&gt;&quot;); <br>
} <br>
} <br>
out.println(&quot;＜br&gt;＜font color=#ff0000&gt;&quot; + path + &quot;目录下的目录：＜/font&gt;＜br&gt;&quot;); <br>
for(int i=0;i＜list.length;i++){ <br>
if(list＜I&gt;.isDirectory()){ <br>
out.println(list＜I&gt;.getName() + &quot;＜br&gt;&quot;); <br>
} <br>
} <br>
%&gt; <br>
＜/body&gt; <br>
＜/html&gt; <br>
<br>
</code><br>
</font><strong>判断是否为空白文件 <br>
</strong><font face="Arial"><code>＜%@ page contentType=&quot;text/html;charset=gb2312&quot;%&gt; <br>
＜%@ page import=&quot;java.io.*&quot;%&gt; <br>
＜html&gt; <br>
＜head&gt; <br>
＜title&gt;判断是否为空白文件＜/title&gt; <br>
＜/head&gt; <br>
＜body&gt; <br>
＜% <br>
String path=request.getRealPath(&quot;/&quot;); <br>
out.println(path); <br>
FileReader fr=new FileReader(path + &quot;\\AtEnd.txt&quot;);//建立FileReader对象，并实例化为fr <br>
//对FileReader类生成的对象使用read()方法，可以从字符流中读取下一个字符。 <br>
if(fr.read()==-1)//判断是否已读到文件的结尾 <br>
{ <br>
out.print(&quot;AtEnd.txt文件中没有数据＜br&gt;&quot;); <br>
}else{ <br>
out.println(&quot;AtEnd.txt文件中有数据&quot;); <br>
} <br>
fr.close(); <br>
%&gt; <br>
＜/body&gt; <br>
＜/html&gt; <br>
<br>
</code><br>
<strong>读取所有的文件数据</strong> <br>
</font><code><font face="Arial">＜%@ page contentType=&quot;text/html;charset=gb2312&quot;%&gt; <br>
＜%@ page import=&quot;java.io.*,java.lang.*&quot;%&gt; <br>
＜html&gt; <br>
＜head&gt; <br>
＜title&gt;读取所有的文件数据＜/title&gt; <br>
＜/head&gt; <br>
＜body&gt; <br>
＜% <br>
String path=request.getRealPath(&quot;.&quot;); <br>
FileReader fr=new FileReader(path + &quot;\\ReadData.txt&quot;); <br>
//关键在于读取过程中，要判断所读取的字符是否已经到了文件的末尾，并且这个字符是不是文件中的断行符，即判断该字符值是否为13。 <br>
int c=fr.read();//从文件中读取一个字符 <br>
//判断是否已读到文件结尾 <br>
while(c!=-1){ <br>
out.print((char)c);//输出读到的数据 <br>
c=fr.read();//从文件中继续读取数据 <br>
if(c==13){//判断是否为断行字符 <br>
out.print(&quot;＜br&gt;&quot;);//输出分行标签 <br>
fr.skip(1);//略过一个字符 <br>
//c=fr.read();//读取一个字符 <br>
} <br>
} <br>
fr.close(); <br>
%&gt; <br>
＜/body&gt; <br>
＜/html&gt; </font><br>
</code> <a href="http://hi.baidu.com/%C6%C6%D4%C6%B5%B6/blog/item/bfddc860650ae0da8cb10df0.html">阅读全文</a>
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/%C6%C6%D4%C6%B5%B6/blog/category/java%D6%AA%CA%B6">java知识</a>&nbsp;<a href="http://hi.baidu.com/%C6%C6%D4%C6%B5%B6/blog/item/bfddc860650ae0da8cb10df0.html#comment">查看评论</a>]]></description>
        <pubDate>2008-06-21  11:29</pubDate>
        <category><![CDATA[java知识]]></category>
        <author><![CDATA[破云刀]]></author>
		<guid>http://hi.baidu.com/%C6%C6%D4%C6%B5%B6/blog/item/bfddc860650ae0da8cb10df0.html</guid>
</item>

<item>
        <title><![CDATA[ORACLE SEQUENCE的简单介绍]]></title>
        <link><![CDATA[http://hi.baidu.com/%C6%C6%D4%C6%B5%B6/blog/item/55a206588b770ddb9d820414.html]]></link>
        <description><![CDATA[
		
		在oracle中sequence就是所谓的序列号，每次取的时候它会自动增加，一般用在需要按序列号排序的地方。  <br>
1、Create Sequence  <br>
你首先要有CREATE SEQUENCE或者CREATE ANY SEQUENCE权限，  <br>
CREATE SEQUENCE emp_sequence  <br>
INCREMENT BY 1　 -- 每次加几个  <br>
START WITH 1　　 -- 从1开始计数  <br>
NOMAXVALUE　　　 -- 不设置最大值  <br>
NOCYCLE　　　　　-- 一直累加，不循环  <br>
CACHE 10;  <br>
<br>
一旦定义了emp_sequence，你就可以用CURRVAL，NEXTVAL  <br>
CURRVAL=返回 sequence的当前值  <br>
NEXTVAL=增加sequence的值，然后返回 sequence 值  <br>
比如：  <br>
emp_sequence.CURRVAL  <br>
emp_sequence.NEXTVAL  <br>
<br>
可以使用sequence的地方：  <br>
- 不包含子查询、snapshot、VIEW的 SELECT 语句  <br>
- INSERT语句的子查询中  <br>
- NSERT语句的VALUES中  <br>
- UPDATE 的 SET中  <br>
<br>
可以看如下例子：  <br>
INSERT INTO emp VALUES  <br>
(empseq.nextval, 'LEWIS', 'CLERK',7902, SYSDATE, 1200, NULL, 20);  <br>
<br>
SELECT empseq.currval FROM DUAL;  <br>
<br>
但是要注意的是：  <br>
- 第一次NEXTVAL返回的是初始值；随后的NEXTVAL会自动增加你定义的INCREMENT BY值，然后返回增加后的值。CURRVAL 总是返回当前SEQUENCE的值，但是在第一次NEXTVAL初始化之后才能使用CURRVAL，否则会出错。一次NEXTVAL会增加一次SEQUENCE的值，所以如果你在同一个语句里面使用多个NEXTVAL，其值就是不一样的。明白？  <br>
<br>
- 如果指定CACHE值，ORACLE就可以预先在内存里面放置一些sequence，这样存取的快些。cache里面的取完后，oracle自动再取一组到cache。 使用cache或许会跳号， 比如数据库突然不正常down掉（shutdown abort),cache中的sequence就会丢失. 所以可以在create sequence的时候用nocache防止这种情况。  <br>
<br>
2、Alter Sequence  <br>
你或者是该sequence的owner，或者有ALTER ANY SEQUENCE 权限才能改动sequence. 可以alter除start至以外的所有sequence参数.如果想要改变start值，必须 drop sequence 再 re-create .  <br>
Alter sequence 的例子  <br>
ALTER SEQUENCE emp_sequence  <br>
　　INCREMENT BY 10  <br>
　　MAXVALUE 10000  <br>
　　CYCLE 　　-- 到10000后从头开始  <br>
　　NOCACHE ;  <br>
<br>
<br>
影响Sequence的初始化参数：  <br>
SEQUENCE_CACHE_ENTRIES =设置能同时被cache的sequence数目。  <br>
<br>
可以很简单的Drop Sequence  <br>
DROP SEQUENCE order_seq;  <a href="http://hi.baidu.com/%C6%C6%D4%C6%B5%B6/blog/item/55a206588b770ddb9d820414.html">阅读全文</a>
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/%C6%C6%D4%C6%B5%B6/blog/category/Oracle">Oracle</a>&nbsp;<a href="http://hi.baidu.com/%C6%C6%D4%C6%B5%B6/blog/item/55a206588b770ddb9d820414.html#comment">查看评论</a>]]></description>
        <pubDate>2008-06-21  10:32</pubDate>
        <category><![CDATA[Oracle]]></category>
        <author><![CDATA[破云刀]]></author>
		<guid>http://hi.baidu.com/%C6%C6%D4%C6%B5%B6/blog/item/55a206588b770ddb9d820414.html</guid>
</item>

<item>
        <title><![CDATA[隐藏div实际使用]]></title>
        <link><![CDATA[http://hi.baidu.com/%C6%C6%D4%C6%B5%B6/blog/item/8e5d5f1323fba026dc5401c5.html]]></link>
        <description><![CDATA[
		
		<p>隐藏并且不占位<br>
&lt;div id=&quot;mmm&quot;&gt;<br>
插入FLASH动画&lt;br&gt;<br>
插入FLASH动画&lt;br&gt;<br>
插入FLASH动画&lt;br&gt;<br>
插入FLASH动画&lt;br&gt;<br>
插入FLASH动画&lt;br&gt;<br>
&lt;/div&gt;<br>
&lt;input type=&quot;button&quot; name=hiddendiv value=&quot;隐藏&quot; onClick=&quot;javascript:return document.all.mmm.style.display='none'&quot;&gt;<br>
&lt;input type=&quot;button&quot; name=showdiv value=&quot;显示&quot;onClick=&quot;javascript:return document.all.mmm.style.display='block'&quot;&gt;<br>
<br>
隐藏但是DIV所占的位置保持空白<br>
&lt;div id=&quot;mmm&quot; style=&quot;background:#cccccc;&quot;&gt;<br>
插入FLASH动画&lt;br&gt;<br>
插入FLASH动画&lt;br&gt;<br>
插入FLASH动画&lt;br&gt;<br>
插入FLASH动画&lt;br&gt;<br>
插入FLASH动画&lt;br&gt;<br>
&lt;/div&gt;<br>
&lt;input type=&quot;button&quot; name=hiddendiv value=&quot;隐藏&quot; onClick=&quot;javascript:return document.all.mmm.style.visibility='hidden'&quot;&gt;<br>
&lt;input type=&quot;button&quot; name=showdiv value=&quot;显示&quot;onClick=&quot;javascript:return document.all.mmm.style.visibility='visible'&quot;&gt;<br>
<br>
复选框控制层的显隐<br>
&lt;input type=checkbox onclick=&quot;tt.style.display=this.checked?'':'none'&quot;&gt;&lt;br&gt;<br>
&lt;div id=tt style=&quot;display:none;background-color:pink;width:400;height:400;&quot;&gt;&lt;/div&gt;</p>
<p> </p>
<p>demo.html</p>
<p>&lt;html&gt;<br>
&nbsp;&nbsp;  &lt;body&gt;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  &lt;div id='a' style=&quot;display='none';&quot; &gt;<br>
&nbsp;&nbsp;&nbsp;&nbsp;  rerr3545e<br>
&nbsp;&nbsp;  &lt;/div&gt;<br>
&nbsp;&nbsp;&nbsp;  &lt;div id='b'&gt;<br>
&nbsp;&nbsp;&nbsp;  &lt;table BORDER=2 CELLPADDING=2 CELLSPACING=4&gt;<br>
&nbsp;&nbsp;&nbsp;&nbsp;  &lt;tr&gt;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  &lt;td&gt;abc&lt;/td&gt;<br>
&nbsp;&nbsp;&nbsp;  &lt;td&gt;abc23&lt;/td&gt;<br>
&nbsp;&nbsp;&nbsp;&nbsp;  &lt;/tr&gt;<br>
&nbsp;&nbsp;&nbsp;&nbsp;  &lt;tr  style=&quot;display='none';&quot;&gt;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  &lt;td&gt;abc2&lt;/td&gt;<br>
&nbsp;&nbsp;&nbsp;  &lt;td&gt;abc3&lt;/td&gt;<br>
&nbsp;&nbsp;&nbsp;&nbsp;  &lt;/tr&gt;<br>
&nbsp;&nbsp; &lt;/table&gt;<br>
&nbsp;&nbsp; &lt;/div&gt;<br>
&nbsp;&nbsp;&nbsp;  &lt;div id='c'&gt;&lt;table BORDER=2 CELLPADDING=2 CELLSPACING=4&gt;<br>
&nbsp;&nbsp;&nbsp;&nbsp;  &lt;tr&gt;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  &lt;td&gt;abc&lt;/td&gt;<br>
&nbsp;&nbsp;&nbsp;  &lt;td style=&quot;display='none';&quot;&gt;abc2&lt;/td&gt;<br>
&nbsp;&nbsp;&nbsp;&nbsp;  &lt;/tr&gt;<br>
&nbsp;&nbsp; &lt;/table&gt;&lt;/div&gt;<br>
&nbsp;&nbsp;  &lt;/body&gt;<br>
&lt;/html&gt;</p> <a href="http://hi.baidu.com/%C6%C6%D4%C6%B5%B6/blog/item/8e5d5f1323fba026dc5401c5.html">阅读全文</a>
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/%C6%C6%D4%C6%B5%B6/blog/category/Html">Html</a>&nbsp;<a href="http://hi.baidu.com/%C6%C6%D4%C6%B5%B6/blog/item/8e5d5f1323fba026dc5401c5.html#comment">查看评论</a>]]></description>
        <pubDate>2008-06-13  15:14</pubDate>
        <category><![CDATA[Html]]></category>
        <author><![CDATA[破云刀]]></author>
		<guid>http://hi.baidu.com/%C6%C6%D4%C6%B5%B6/blog/item/8e5d5f1323fba026dc5401c5.html</guid>
</item>

<item>
        <title><![CDATA[C语言中用结构实现位段]]></title>
        <link><![CDATA[http://hi.baidu.com/%C6%C6%D4%C6%B5%B6/blog/item/cb79454372a4511672f05d85.html]]></link>
        <description><![CDATA[
		
		C语言中的结构是有实现位段的能力的，噢！你问它到底是什么形式是吧？这个问题呆会给你答案。让我们先看看位段的作用：位段是在字段的声明后面加一个冒号以及一个表示字段位长的整数来实现的。这种用法又被就叫作&ldquo;深入逻辑元件的编程&rdquo;，如果你对系统编程感兴趣，那么这篇文章你就不应该错过！<br>
　　我把使用位段的几个理由告诉大家：1、它能把长度为奇数的数据包装在一起，从而节省存储的空间；2、它可以很方便地访问一个整型值的部分内容。<br>
　　首先我要提醒大家注意几点：1、位段成员只有三种类型：int ,unsigned int 和signed int这三种（当然了，int型位段是不是可以取负数不是我说了算的，因为这是和你的编译器来决定的。位段，位段，它是用来表示字段位长（bit）的，它只有整型值，不会有7.2这种float类型的，如果你说有，那你就等于承认了有7.2个人这个概念，当然也没有char这个类型的）；2、成员名后面的一个冒号和一个整数，这个整数指定该位段的位长（bit）;3、许多编译器把位段成员的字长限制在一个int的长度范围之内；4、位段成员在内存的实现是从左到右还是从右到左是由编译器来决定的，但二者皆对。<br>
　　下面我们就来看看，它到底是什么东西（我先假定大家的机器字长为32位）：<br>
　　Struct WORD<br>
　　{<br>
&nbsp;&nbsp;&nbsp;&nbsp;  unsigned int chara: 6:<br>
&nbsp;&nbsp;&nbsp;&nbsp;  unsigned int font : 7;<br>
&nbsp;&nbsp;&nbsp;&nbsp;  unsigned int maxsize : 19;<br>
　　};<br>
　　Struct WORD chone;<br>
　　这一段是从我编写的一个文字格式化软件摘下来的，它最多可以容纳64（既我说的unsigned int chara :6; 它总共是6位）个不同的字符值，可以处理128（既unsigned int font : 7 ;既2的7次方）种不同的字体，和2的19次方的单位长度的字。大家都可以看到maxsize是19位，它是无法被一个short int 类型的值所容纳的，我们又可以看到其余的成员的长度比char还小，这就让我们想起让他们共享32位机器字长，这就避免用一个32位的整数来表示maxsize的位段。怎么样？还要注意的是刚才的那一段代码在16位字长的机器上是无法实现的，为什么？提醒你一下，看看上面提醒的第3点，你会明白的！<br>
你是不是发现这个东西没有用啊？如果你点头了，那你就错了！这么伟大的创造怎么会没有用呢（你对系统编程不感兴趣，相信你会改变这么一个观点的）？磁盘控制器大家应该知道吧？软驱与它的通信我们来看看是怎么实现的下面是一个磁盘控制器的寄存器：<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  │←5→│←5→│←9→│←8→│←1→│←1→∣←1→∣←1→∣←1→∣<br>
　　上面位段从左到右依次代表的含义为：5位的命令，5位的扇区，9位的磁道，8位的错误代码，1位的HEAD LOADED,1位的写保护，1位的DISK SPINNING，1位的错误判断符，还有1位的READY位。它要怎么来实现呢？你先自己写写看：<br>
　　struct DISK_FORMAT<br>
　　{<br>
&nbsp;&nbsp;&nbsp;&nbsp;  　　　unsigned int command : 5;<br>
　　　　　unsigned&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  sector&nbsp;&nbsp;  : 5;<br>
&nbsp;&nbsp;&nbsp;&nbsp;  　　　unsigned&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  track&nbsp;&nbsp;&nbsp;&nbsp;  :&nbsp;&nbsp;  9 ;<br>
&nbsp;&nbsp;&nbsp;&nbsp;  　　　unsigned&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  err_code&nbsp;&nbsp;  :&nbsp;&nbsp;  8;<br>
&nbsp;&nbsp;&nbsp;&nbsp;  　　　unsigned&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  ishead_loaded&nbsp;&nbsp;  :&nbsp;&nbsp;  1;<br>
&nbsp;&nbsp;&nbsp;&nbsp;  　　　unsigned&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  iswrit_protect&nbsp;&nbsp;&nbsp;  :&nbsp;&nbsp;  1;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  　　　unsigned&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  isdisk_spinning&nbsp;&nbsp;  :&nbsp;&nbsp;  1;<br>
&nbsp;&nbsp;&nbsp;&nbsp;  　　　unsigned&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  iserr_ocur&nbsp;&nbsp;  : 1;<br>
&nbsp;&nbsp;&nbsp;&nbsp;  　　　undigned&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  isready&nbsp;&nbsp;&nbsp;&nbsp;  :1 ;<br>
　　};&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
　　注：代码中除了第一行使用了unsigned int 来声明位段后就省去了int ，这是可行的，详见ANCI C标准。<br>
　　如果我们要对044c18bfH的地址进行访问的话，那就这样：<br>
　　#define&nbsp;&nbsp;  DISK&nbsp;&nbsp;  ((struct DISK_FORMAT *)0x044c18bf)<br>
　　DISK-&gt;sector=fst_sector;<br>
　　DISK-&gt;track=fst_track;<br>
　　DISK-&gt;command=WRITE;<br>
　　当然那些都是要宏定义的哦！<br>
　　我们用位段来实现这一目的是很方便的，其实这也可以用移位或屏蔽来实现，你尝试过就知道哪个更方便了！<br>
　　 <a href="http://hi.baidu.com/%C6%C6%D4%C6%B5%B6/blog/item/cb79454372a4511672f05d85.html">阅读全文</a>
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/%C6%C6%D4%C6%B5%B6/blog/category/C">C</a>&nbsp;<a href="http://hi.baidu.com/%C6%C6%D4%C6%B5%B6/blog/item/cb79454372a4511672f05d85.html#comment">查看评论</a>]]></description>
        <pubDate>2008-05-28  16:23</pubDate>
        <category><![CDATA[C]]></category>
        <author><![CDATA[破云刀]]></author>
		<guid>http://hi.baidu.com/%C6%C6%D4%C6%B5%B6/blog/item/cb79454372a4511672f05d85.html</guid>
</item>

<item>
        <title><![CDATA[C语言当中位段的使用]]></title>
        <link><![CDATA[http://hi.baidu.com/%C6%C6%D4%C6%B5%B6/blog/item/bbe2efec2709b6d42e2e2184.html]]></link>
        <description><![CDATA[
		
		<p>位段以位为单位定义结构体（或共用体）中成员所占存储空间的长度。<br>
 含有位段的结构体类型称为位段结构。</p>
<p>位段结构也是一种结构体类型，只不过其中含有以位为单位定义存储长度的整数类型位段成员。采用位段结构既节省存储空间，又可方便操作。</p>
<p><strong>位段结构中位段的定义格式为：</strong><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  unsigned &lt;成员名&gt;:&lt;二进制位数&gt;<br>
例如：<br>
struct bytedata<br>
{unsigned a:2;&nbsp;&nbsp;  /*位段a，占2位*/<br>
 unsigned:6;  /*无名位段，占6位，但不能访问*/<br>
 unsigned:0;&nbsp;&nbsp;&nbsp;&nbsp;  /*无名位段，占0位，表下一位段从下一字边界开始*/<br>
 unsigned b:10;  /*位段b，占10位*/<br>
 int i;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  /*成员i，从下一字边界开始*/<br>
}data;</p>
<p><strong>位段数据的引用</strong>:<br>
同结构体成员中的数据引用一样，但应注意位段的最大取值范围不要超出二进制位数定的范围，否则超出部分会丢弃。<br>
例如：data.a=2;&nbsp;&nbsp;  但  data.a=10;就超出范围（a占2位，最大3）</p>
<p><strong>关于位段数据，注意以下几点:</strong></p>
<p>（1）一个位段必须存储在同一存储单元（即字）之中，不能跨两个单元。如果其单元空间不够，则剩余空间不用，从下一个单元起存放该位段。<br>
（2）可以通过定义长度为0的位段的方式使下一位段从下一存储单元开始。<br>
（3）可以定义无名位段。<br>
（4）位段的长度不能大于存储单元的长度。<br>
（5）位段无地址，不能对位段进行取地址运算。<br>
（6）位段可以以%d，%o，%x格式输出。<br>
（7）位段若出现在表达式中，将被系统自动转换成整数。</p> <a href="http://hi.baidu.com/%C6%C6%D4%C6%B5%B6/blog/item/bbe2efec2709b6d42e2e2184.html">阅读全文</a>
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/%C6%C6%D4%C6%B5%B6/blog/category/C">C</a>&nbsp;<a href="http://hi.baidu.com/%C6%C6%D4%C6%B5%B6/blog/item/bbe2efec2709b6d42e2e2184.html#comment">查看评论</a>]]></description>
        <pubDate>2008-05-28  16:21</pubDate>
        <category><![CDATA[C]]></category>
        <author><![CDATA[破云刀]]></author>
		<guid>http://hi.baidu.com/%C6%C6%D4%C6%B5%B6/blog/item/bbe2efec2709b6d42e2e2184.html</guid>
</item>


</channel>
</rss>