标题: [文本处理] 批处理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
现在我要以逗号作为分隔符提取第二列的内容- 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
- @echo off&setlocal enabledelayedexpansion
- for /f "delims=" %%i in (test.txt) do (
- set str=%%i
- set str=!str:,=, !
- for /f "tokens=2,4 delims=," %%j in ("!str!") do (
- set sj=%%j&set sk=%%k
- echo,!sj: =! !sk: =!
- )
- )
- pause
复制代码
作者: PowerShell 时间: 2013-12-11 14:37
以[逗号]为切割符,切割一个字符串,成为数组的话,在powershell中是没有这个问题的,- $变量 = '1,2,3,4,5' -split ','
复制代码
powershell中:
第一行切割完,结果是 1 2 3
第二行切割完,结果是 1 空 空
这样的话,你判断字符串是否是空字符串即可。复制代码
作者: lifei259 时间: 2013-12-11 20:08
本帖最后由 lifei259 于 2013-12-11 20:19 编辑
- 1,2,3,4,5,6,7,8,9
- 1,,,6,6,7,8,9
复制代码
你下一行用的不英文的【,】是中文【,】。
怎么能处理。开玩笑吧
作者: PowerShell 时间: 2013-12-12 12:37
to 4楼:
1 我还真没注意楼主的第二行数据竟然含有中,英文逗号.
2 对于上述情况又怎么办呢?
答:用这个powershell代码即可- $变量 = ('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://bbs.bathome.net/) |
Powered by Discuz! 7.2 |