//批处理与 aardio 对比 - for 命令之文本分析 import console import process.batch; //批处理 for 遍历并拆分字符串 var bat = process.batch(` @echo off for %%i in (abc,def,xyz) do echo %%i `) console.log(bat.read(-1)) /* 用aardio 实现与上面相同的功能, 循环遍历用空格键、跳格键(tab)、逗号、分号或等号拆分出来的字符串, string.lines 的第 @2 个参数指定分隔符,支持类正则表达式的 aardio 模式匹配语法。 */ for( line in string.lines("abc,def,xyz","[\s,;=]") ){ //注意 aardio 里循环变量名不需要在前面加%%,也不限制只能使用26个字母 console.log(line) } //创建测试文件 string.save("/test.txt","abc,def 123,456" ) //批处理 for 遍历并按行拆分字符串 var bat = process.batch(` @echo off for /f "usebackq delims=, tokens=1,2" %%i in ("test.txt") do echo %%i,%%j `) //注意文件路径如果有空格必须包含在引号内 //如果要用引号包含路径,就必须加上 usebackq,usebackq的意思是用反引号包含命令,单引号包含字符串,然后双引号就可以包含文件路径而不是字符串了 console.log(bat.read(-1)); console.more(1); //aardio 需要先读文件到字符串 var str = string.load("/test.txt") //参数@3指定delims,可以用强大的模式匹配语法指定分隔符 for tokens in string.lines(str,,",") { //tokens是一个数组,可以用 string.join 任意拼接数组中指定范围的元素实现批处理 tokens=n-m 的效果 console.log(tokens[1],tokens[2]) } /* aardio 提供了大量的字符串函数,以及强大的模式匹配功能, 可以实现非常复杂的文本解析功能,例如标准库中解析JSON的 JSON,解析XML,HTML的 string.xml,string.html等等 */ //例如我们也可以用 string.each 实现上面的功能 for a,b in string.each(str,"([^,]+),(.+)"){ console.log(a,b) } //删除测试文件 io.remove("/test.txt") console.pause()