我正在尝试解析一个文本文件,如果它是空的,它正在跳过一个列。 这是文件格式:
206695844 66583369 L CAT 1 1 4144042 214857 64378180 L 4144039 214853 Y
206669467 127810625 R CAT 38 1 4136724 213413 724749204 R 4136727 213420 Y
206445106 65588013 L CAT 4 1 4139084 210381 64363708 L 4139082 210372 Y
^
empty column
如您所见,有14列,每列都以制表符分隔。
我的解析线是:
FOR /F "tokens=1,2,5,7,8,9" %%i in (datafile.txt) DO (
echo %%i %%j %%k %%l %%m %%n >> outputDatafile.txt
)
问题是它正在跳过第9列(示例中为空白),而使用第10列,如:
206695844 66583369 1 4144042 214857 64378180
我希望第9列 - 即使是空的!
我也尝试使用显式制表符作为分隔符,因为FOR的帮助说:
delims = XXX
- 指定分隔符集。这将替换默认的空格分隔符集和选项卡:
FOR /F "tokens=1,2,5,7,8,9* delims= " %%i in (datafile.txt) DO (
^tab
我做错了什么?
<小时/> 的修改
jeb得到了它 - 谢谢!
将结果吐出到我的文件中,我只使用:
echo (!col1!%tab%!col2!%tab%!col3!%tab%!col4!%tab%!col5!%tab%!col6!) >> outputFile.txt
答案 0 :(得分:2)
delim机制的工作方式是将一个或多个连续的delim减少为单个delim,这就是为什么你不能以这种方式得到一个空列。
但在你的情况下,用delim和none delim字符替换delims似乎很容易
喜欢:
set "line=#!line:<TAB>=<TAB>#!"
然后每列都以#
为前缀,因此您甚至可以获得“空”列
你只需要删除第一个字符。
setlocal EnableDelayedExpansion
set "tab= "
FOR /F "delims=" %%L in (datafile.txt) DO (
set "line=%%L"
set "line=#!line:%TAB%=%TAB%#!"
for /F "tokens=1,2,5,7,8,9 delims=%TAB%" %%1 in ("!line!") DO (
echo %%1, %%2, %%3, %%4, %%5, %%6
set "col1=%%1"
set "col1=!col1:~1!"
echo(!col1!
)
)