快速业务通道

for 语句从入门到精通

作者 佚名 来源 批处理 浏览 发布时间 2013-07-09
来,无外乎都是形如"c:\test.txt"、"CWnd"之类的文本信息;而所有的对象,具体的如ini文件中的某条配置信息、注册表中的某个键值、数据库中的某条记录……都只有转化为具有一定格式的文本信息,方可被代码识别、操控。可以说,编程的很大一部分工作,都是在绞尽脑汁想方设法如何提取这些文本信息。

  而提取文本信息,则是for /f的拿手好戏:读取文件内容;提取某几行字符;截取某个字符片段;对提取到的内容再切分、打乱、杂糅……只要你所能想到的花样,for /f 都会想方设法帮你办到,因为,for /f 就是被设计成专门用于解析文本的。

  先来看个例子。

  假如有个文本文件test.txt,内容如下:

[txt1]
论坛的目标是:不求最大,但求最好,做最实用的批处理论坛。
论坛地址:bbs.bathome.cn。
这里是:新手晋级的福地,高手论剑的天堂。

  那么,将如下代码保存为test.cmd,并放在test.txt同一目录下运行,将会在屏幕上原样显示test.txt的内容:

[code4]
@echo off
for /f %%i in (test.txt) do echo %%i
pause

  这段代码,主要是让你树立这样一种观念:读取文本文件的内容,请使用 for /f 语句!


  进阶话题:for /f 语句是把整个test.txt一次性显示出来的?

  在这段代码中,虽然执行结果是把test.txt中的所有内容都显示出来了,貌似 for /f 语句是把整个test.txt一次性显示到屏幕上,实际上并非如此。

  无论for语句做何种变化,它的执行过程仍然遵循基本的for流程:依次处理每个元素,直到所有的元素都被处理为止。只不过在for /f语句中,这里的元素是指文件中的每一行,也就是说,for /f 语句是以行为单位处理文本文件的。这是一条极为重要的规则,在上一章中也强调过它的重要性,希望在接下来的学习过程中,你能时刻牢记这一原则,那么,很多问题将会迎刃而解。以下是验证这一说法的演示代码(在[code4]的基础上添加了&pause语句):

[code5]
@echo off
for /f %%i in (test.txt) do echo %%i&pause
pause

(二) 切分字符串的利器:delims=

  也许你对[code4]这段代码不屑一顾:不就是把test.txt的内容显示出来了么?好像用处不大啊。

  好吧,我们来玩个魔术。

  还是[txt1]这段文本,把[code4]改造一下:

[code6]
@echo off
for /f "delims=," %%i in (test.txt) do echo %%i
pause

  再次运行test.cmd,看到什么变化了吗?!

[result2]
论坛的目标是:不求最大
论坛地址:bbs.bathome.cn。
这里是:新手晋级的福地
请按任意键继续...

  结果,你惊奇地发现,每行第一个逗号之后的所有内容都不见了(如果有不存在逗号的行,则保留原样),也就说,你成功地提取到了每行第一个逗号之前的所有内容!

  试想一下,这段代码会有什么用呢?

  如果别人给了你一个软件清单,每行都是"英文软件名(逗号)中文软件名"的格式,而你却只想保留英文名的时候,这段代码将是多么有用啊!再假设,有这么一个IP文件,第一列是数字格式的IP地址,第二列是具体的空间地址,列与列之间用逗号分隔,而你想提取其中数字格式的IP,呵呵,我不说你也知道该怎么办了吧?

  要是文本内容不是以逗号分隔,而是以其他符号分隔,那么,把"delims=,"的逗号换成相应的符号就可以了。

  在这里,我们引入了一个新的开关:"delims=,",它的含义是:以逗号作为被处理的字符串的分隔符号。

  在批处理中,指定分隔符号的方法是:添加一个形如 "delims=符号列表" 的开关,这样,被处理的每行字符串都会被符号列表中罗列出来的符号切分开来。

  需要注意的是:如果没有指定"delims=符号列表"这个开关,那么,for /f 语句默认以空格键或跳格键作为分隔符号。请把[txt1]中不同位置上的标点符号改为空格或跳格,再

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号