我有csv格式的数据,可从SQL Server
获取输出。数据写出了一些NULL
和N.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),但我很清楚如何编写确切的语法并执行替换操作。非常感谢有用的投入!
答案 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。请注意,需要调用集,因为它将扩展在同一行传递的变量。