[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
先用delims指定的分隔符进行分割(把分隔符去掉,得到其他部分),得到一个新循环集,这个循环集才是其他选项的依据。
eol选项看这个循环集是否以它指定的字符开头决定是否过滤掉此循环集(此行)。(过滤掉即直接跳过,后续操作直接忽视,继续处理一下行)
zqz0012005 发表于 2009-8-16 23:43


此处也即此帖论述的核心似乎值得推敲
虽然给定的示例很有说服力
但我想这样的设计原则有违常理
因为对文本行分割必然牵涉字符串遍历和令牌分配
而这是一个“高耗能”的过程
如果说for/f在花费了很大性能完成分割之后
才发现文本行有eol字符
然后选择放弃所有分割成果和令牌
显然是一个不“节能”的设计思路

这么明显的性能浪费
微软的开发人员会看不出来吗?
显然,微软应该有更为合理的设计

因此我猜测得到一个更为合理的解释——
for/f在对文本文件进行完前期的处理之后(比如skip)
会首先对当前文本行行首进行delims的过滤
而这是一个低耗能的工作
因为很可能行首没有分隔符或只有很少的分隔符
之后再判断剩余的文本行是否以eol开头
如果是则跳过这一行继续下一行
否则再进行真正的delims分割和tokens分配

至于for的设计者为什么要先做行首过滤
我猜测这是延续了高级语言的分析特性
因为在很多高级语言中的行注释字符
是允许放在空格、tab等分隔符之后的
编译器为了兼容这种用法
就必然会对每行代码先做行首过滤
再做语法分析看是否是注释行

一家之言,仅供参考!
天的白色影子

TOP

返回列表