通过命令行替换csv中的特定文本

时间:2013-12-16 07:08:42

标签: batch-file csv command-line replace findstr

我有csv格式的数据,可从SQL Server获取输出。数据写出了一些NULLN.A.值,这使得列字符类型 - 否则它只包含整数。是否可以通过批处理文件语句查找并用数字替换这些值 - 例如,NULL为-1,N.A.为-2。以下是数据的现状:

    Col A,  Col B,  Col C,  Col D,  Col E,  Col F,  Col G,  Col H
    NULL,   13,     11,     N.A.,   4710,   N.A.,   1,      1
    5,      NULL,   13,     7070,   N.A.,   4920,   N.A.,   1
    5,      NULL,   12,     8680,   N.A.,   9130,   N.A.,   1

我想将其转换为:

    Col A,  Col B,  Col C,  Col D,  Col E,  Col F,  Col G,  Col H
    -1,     13,     11,     -2,     4710,   -2,     1,      1
    5,      -1,     13,     7070,   -2,     4920,   -2,     1
    5,      -1,     12,     8680,   -2,     9130,   -2,     1

重要的是通过批处理语句执行此操作,因为这是一个中间输出,并立即被另一个程序读入。我已经看了findstr命令(http://technet.microsoft.com/en-us/library/bb490907.aspx),但我很清楚如何编写确切的语法并执行替换操作。非常感谢有用的投入!

3 个答案:

答案 0 :(得分:5)

@echo off
    setlocal enableextensions enabledelayedexpansion

    (for /f "tokens=*" %%f in (a.csv) do if not "%%f"=="" (
            set "line=%%f"
            set "line=!line:NULL=-1!"
            set "line=!line:N.A.=-2!"
            echo(!line!
    )) > b.csv

    endlocal

如果如OP所述,文件采用指示的格式,仅包含整数,NULL和N.A.,或者至少它不包含特殊字符,这将起作用。

答案 1 :(得分:5)

这使用了来自 - https://www.dropbox.com/s/qidqwztmetbvklt/repl.bat

的名为repl.bat的帮助程序批处理文件

repl.bat放在与批处理文件相同的文件夹中或放在路径上的文件夹中。

它应该更强大,更快。

type file.csv |repl "NULL" "-1" |repl "N\.A\." "-2" >newfile.csv

答案 2 :(得分:2)

试试这个:

@echo off
setLocal enableDelayedExpansion

set filename=input.txt
set originalText1=NULL
set "replacedText1=-1"
set "originalText2=N.A."
set "replacedText2=-2"

for /f "tokens=*" %%a in ('type %filename%') do (
    set "line=%%a"
    if defined line (
        call set "line=%%line:%originalText1%=%replacedText1%%%"
        call set "line=%%line:%originalText2%=%replacedText2%%%"
        echo !line!>> output.txt
    ) else (
        echo.
    )
)

此代码可帮助您将NULL的所有实例替换为-1,将N.A.替换为-2。然后,结果将存储在output.txt中。希望它有所帮助。

P.S。请注意,需要调用集,因为它将扩展在同一行传递的变量。