Board logo

标题: [文本处理] 批处理delims,tokens怎样避免某列的值为空? [打印本页]

作者: cumtsx    时间: 2013-12-11 12:59     标题: 批处理delims,tokens怎样避免某列的值为空?

假如有一个文件test.txt,其内容如下:
1,2,3,4,5,6,7,8,9
1,,,6,6,7,8,9
现在我要以逗号作为分隔符提取第二列的内容
  1. for /f "tokens=2,4 delims=," %%i in (test.txt) do echo %%i %%j
复制代码
执行结果,由于文件中第二行第二列内容为空,输出时会把第四列的6赋值给%%i ,而把第六列的7赋值给%%j,而本来打算第四列输出6
请问怎么避免这个问题?

其实我是想将某一列的数值和一个给定数值作比较大小,如果满足条件执行相应语句。
比如说吧,如果第6列的数大于5就执行command。提取第二行会出现问题。
请问还有什么方法吗?
作者: foxJL    时间: 2013-12-11 13:44

  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "delims=" %%i in (test.txt) do (
  3.     set str=%%i
  4.     set str=!str:,=, !
  5.     for /f "tokens=2,4 delims=," %%j in ("!str!") do (
  6.     set sj=%%j&set sk=%%k
  7.     echo,!sj: =! !sk: =!
  8.     )
  9. )
  10. pause
复制代码

作者: PowerShell    时间: 2013-12-11 14:37

以[逗号]为切割符,切割一个字符串,成为数组的话,在powershell中是没有这个问题的,
  1. $变量 = '1,2,3,4,5' -split ','
复制代码
powershell中:
第一行切割完,结果是 1 2 3
第二行切割完,结果是 1 空 空
这样的话,你判断字符串是否是空字符串即可。
  1. if  ($变量[2] -eq "")
复制代码

作者: lifei259    时间: 2013-12-11 20:08

本帖最后由 lifei259 于 2013-12-11 20:19 编辑
  1. 1,2,3,4,5,6,7,8,9
  2. 1,,,6,6,7,8,9
复制代码
你下一行用的不英文的【,】是中文【,】。
怎么能处理。开玩笑吧
作者: PowerShell    时间: 2013-12-12 12:37

to 4楼:

1 我还真没注意楼主的第二行数据竟然含有中,英文逗号.
2 对于上述情况又怎么办呢?
答:用这个powershell代码即可
  1. $变量 = ('1,2,,4,5,6,7,8' -split ',') -split ','
复制代码

作者: cumtsx    时间: 2013-12-15 01:14

回复 4# lifei259


    不好意思,我输入的时候没注意看,都是英文的
作者: cumtsx    时间: 2013-12-15 01:15

回复 3# PowerShell


    谢谢斑竹,我试试看




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2