2

我使用.bat文件来移动每天创建的 CSV。我现在需要清理它:

  • 查找并将“-”替换为0
  • 查找并用 0 替换空单元格
  • 删除所有空格

CSV 只有 20 行。

4

3 回答 3

2

真的不知道,你需要什么。请解释更多,如果这对你不起作用:

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
)
于 2013-07-14T08:51:23.423 回答
0

批处理文件不是一个很好的工具。使用 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
于 2013-07-14T10:34:25.153 回答
0
@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

现在互联网小仙女们终于回来了,这是我的版本……

于 2013-07-14T14:10:35.660 回答