用逗号“,”替换TAB的批处理文件

时间:2016-01-19 11:34:14

标签: batch-file text-processing

任何人都可以帮我找一个批处理文件脚本,自动删除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

3 个答案:

答案 0 :(得分:2)

您不需要复杂的方法来实现替换,就像这个一样简单。下面的小批处理文件用逗号替换所有选项卡:

@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扩展名保存此代码。

答案 1 :(得分:0)

@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
  • 的数字
  • 选择接下来的32列到col2
  • nothing
  • 替换16,8,4和2空格的字符串
  • 删除最后一个字符(如果是空格)
  • 使用默认分隔符并构建输出行来标记列之后的行部分。

替换例程

@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设置中引号之间的字符是 Tab 而不是空格字符串。

所以这一次,使用tab(或标签序列)作为分隔符将行分成7列;分配给%% a .. %% g并且反刍。如果缺少第3列,则不会分配%%g(因为有一列短),因此%%g似乎 nothing 。如果检测到这种情况,请插入一个空字段作为第3列(因此,,

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

答案 2 :(得分:0)

这应该用逗号替换所有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