Batch file 清理CSV文件
我使用Batch file 清理CSV文件,batch-file,Batch File,我使用.bat文件移动每天创建的CSV。我现在需要清理它: 查找并将“-”替换为0 查找空单元格并将其替换为0 删除所有空格 CSV只有20行。不知道你需要什么。如果这对您不起作用,请进一步解释: for /f "delims=" %%a in (old.csv) do ( set "line=%%a" setlocal enabledelayedexpansion set "line=!line: =!" set "line=!line:-=0!" >> n
.bat
文件移动每天创建的CSV。我现在需要清理它:
- 查找并将“-”替换为0
- 查找空单元格并将其替换为0
- 删除所有空格
CSV只有20行。不知道你需要什么。如果这对您不起作用,请进一步解释:
for /f "delims=" %%a in (old.csv) do (
set "line=%%a"
setlocal enabledelayedexpansion
set "line=!line: =!"
set "line=!line:-=0!"
>> new.csv echo(!line!
endlocal
)
批处理文件不是一个很好的工具。您最好使用PowerShell:
(Get-Content 'C:\path\to\in.csv') `
-replace ' ', '' `
-replace '-', '0' `
-replace '^,', '0,' `
-replace ',$', ',0' `
| % {
while ($_ -match ',,') { $_ = $_ -replace ',,', ',0,' }
$_
} | Out-File 'C:\path\to\out.csv'
甚至VBScript:
Set fso = CreateObject("Scripting.FileSystemObject")
inFilename = "C:\path\to\in.csv"
outFilename = "C:\path\to\out.csv"
Set inFile = fso.OpenTextFile(inFilename)
Set outFile = fso.OpenTextFile(outFilename, 2, True)
outFile.WriteLine inFile.ReadLine 'write header
Do Until inFile.AtEndOfStream
line = inFile.ReadLine
line = Replace(line, " ", "")
line = Replace(line, "-", "0")
If Left(line, 1) = "," Then line = "0" & line
If Right(line, 1) = "," Then line = line & "0"
Do While InStr(line, ",,") > 0
line = Replace(line, ",,", ",0,")
Loop
outFile.WriteLine line
Loop
inFile.Close
outFile.Close
现在网络精灵终于回来了,这是我的版本…-可能是最简单的方法。一些示例数据将有巨大的帮助。您需要显示前后表单。现在,你问的是一段字符串有多长?
set“line=!line:,,,=,0,!”
。也不适用于前导/尾随空字段。@Ansgar Wiechers是的,它不是很有用。在三个相邻的字段上,它跳过了第二个字段,以及前导字段和尾随字段。感谢您的帮助,所有Sorterdi都尝试了此代码和代码答案。我得到的结果是两者的=符号列。所以我可能做了一些不正确的事情,或者解释得很糟糕。我有一个csv文件,例如ID,-,C,我想将其更改为ID,C,0198,mm,抱歉,在完成例如-,IM,,198,0到0,IM,0198,0之前,我按了回车键,下面是我在@ECHO OFF SETLOCAL中键入的代码(对于/f“delims=“%%I in(recon_S21206.csv)DO(SET“line=%%I”和CALL:PROCESS))>new.csv GOTO:EOF:PROCESS SET line=%line:=%SET line=%line:-=0%SET line2=%line:,=,0,!如果不是“%line%”==“%line2%”转到进程如果“%line:~0,1%”==“,“SET line=0%line%ECHO%line%GOTO:%EOF”
@ECHO OFF
SETLOCAL
(
FOR /f "delims=" %%i IN (yourfile.csv) DO (
SET "line=%%i"&CALL :process
)
)>newcsv.csv
GOTO :EOF
:process
SET line=%line: =%
SET line=%line:-=0%
SET line2=%line%
SET line=%line:,,=,0,%
IF NOT "%line%"=="%line2%" GOTO process
IF "%line:~0,1%"=="," SET line=0%line%
ECHO %line%
GOTO :EOF