用于将 TAB 替换为逗号","的批处理文件



谁能帮我找到一个批处理文件脚本,自动删除TAB字符并用,替换它们?

例如:

61  LEUKOCELL 2                     7737    PK25    278 N   Y
97  SNAP COMBO PLUS (FELV/FIV)      9906034 PK15    290.82  N   Y

我在文本文件中有 90k+ 行:我可以使用批处理文件自动重新格式化为:

61,LEUKOCELL 2,7737,PK25,278,N,Y
97,SNAP COMBO PLUS (FELV/FIV),906034,PK15,90.82,N,Y

您不需要复杂的方法即可实现像这样简单的替换。下面的小批处理文件将所有选项卡替换为逗号:

@set @a=0  /*
@cscript //nologo //E:JScript "%~F0" < input.txt > output.txt
@move /Y output.txt input.txt
@goto :EOF */
WScript.Stdout.Write(WScript.StdIn.ReadAll().replace(/t/g,","));

使用扩展名保存此代码.BAT。

这应该用逗号替换所有 TABS。

call jrepl "t" "," /x /f "input-file.txt" /o "output-file.txt"

这使用由dbenham编写的名为Jrepl.bat的本机Windows批处理脚本,该脚本使用jscript使其非常健壮和快速。
http://www.dostips.com/forum/viewtopic.php?f=3&t=6044

将其放在与

批处理文件相同的文件夹中,或放在系统路径上的文件夹中。

Dropbox上也有副本(下载后取消阻止):
https://www.dropbox.com/s/4otci4d4s8x5ni4/Jrepl.bat

@ECHO OFF
SETLOCAL
SET "sourcedir=U:sourcedir"
SET "destdir=U:destdir"
SET "filename1=%sourcedir%q34875733.txt"
SET "outfile=%destdir%outfile.txt"
(
FOR /f "usebackqdelims=" %%a IN ("%filename1%") DO (
 SET "line=%%a"&call :process
)
)>"%outfile%"
GOTO :EOF
:process
SET /a "col1=%line:~0,4%"
SET "col2=%line:~4,32%"
SET "col2=%col2:                =%"
SET "col2=%col2:        =%"
SET "col2=%col2:    =%"
SET "col2=%col2:  =%"
IF "%col2:~-1%"==" " SET "col2=%col2:~0,-1%"
FOR /f "tokens=1-5" %%i IN ("%line:~36%") DO ECHO %col1%,%col2%,%%i,%%j,%%k,%%l,%%m
GOTO :EOF

您需要更改sourcedirdestdir的设置以适合您的情况。

我使用了一个名为 q34875733.txt 的文件,其中包含您的数据进行测试。

生成定义为 %outfile% 的文件

假设您的布局是如上所述的固定列,并且批处理显示敏感度的数据中没有字符,那么在我的机器上,将 2 行重复到具有 90K+ 行的文件的运行时间约为 7 分钟。

对于每行,将行分配给line并处理方式

  • 选择前 4 列作为要col1的数字
  • 选择要col2的下 32 列
  • 将 16、8、4 和 2 个空格的字符串替换为 nothing
  • 删除最后一个字符(如果是空格)
  • 使用默认分隔符标记列后面的行部分并构建输出行。

更换程序

@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
SET "sourcedir=U:sourcedir"
SET "destdir=U:destdir"
SET "filename1=%sourcedir%q34875733.txt"
SET "outfile=%destdir%outfile.txt"
SET "tab=   "
(
FOR /f "usebackqtokens=1-7delims=%tab%" %%a IN ("%filename1%") DO (
 REM detect missing column 3
 IF "%%g" == "" (ECHO %%a,%%b,,%%c,%%d,%%e,%%f) ELSE (ECHO %%a,%%b,%%c,%%d,%%e,%%f,%%g)
)
)>"%outfile%"
GOTO :EOF

查看源数据后,可以发现列使用制表符对齐,有时缺少第 3 列(413 denelan)

因此 - 替换例程(您需要将源数据 61 LEUKOCELL 2 重新格式化为与文件其余部分相同的格式。

请注意,变量 tab 设置中引号之间的字符是制表符而不是空格字符串。

所以这一次,使用制表符(或制表符序列)作为分隔符将行分成 7 列;分配给 %%a。%%g 并反刍。如果缺少第 3 列,则不会分配%%g(因为短了一列),因此%%g看起来什么都没有。如果检测到这种情况,请插入一个空字段作为第 3 列(因此,,

我假设所有数据都包含 7 列或缺少第 3 列的 6 列。

最新更新