gpt4 book ai didi

windows-7 - DOS 批处理文件正在跳过 FOR delims

转载 作者:行者123 更新时间:2023-12-02 23:18:07 24 4
gpt4 key购买 nike

我正在尝试解析一个文本文件,它除了跳过空列之外还可以工作。文件格式如下:

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

最佳答案

delim 机制的工作方式是将一个或多个连续的 delim 减少为单个 delim,这就是为什么您无法通过这种方式获得空列。

但在您的情况下,用 delim 和 none delim 字符替换 delim 似乎很容易。
喜欢: 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!
)
)

关于windows-7 - DOS 批处理文件正在跳过 FOR delims,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7525711/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com