2013-07-14 33 views
2

我使用.bat文件來移動每天創建的CSV文件。我現在需要把它清理乾淨:清理CSV文件

  • 查找和替換「 - 」 0
  • 查找和0
  • 刪除更換空單元格的所有空間

的CSV只有20行。

+0

http://blogs.technet.com/b/heyscriptingguy/archive/2005/02/08/how-can-i-find-and-replace-text-in-a-text-file.aspx - 可能是最簡單的方法。 – npocmaka

+0

一些示例數據將具有巨大的幫助。你需要顯示前後的表單。就目前而言,你只是問一段弦是多久? – Magoo

回答

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 
) 
+0

'set「line =!line:,, =,0,!」'我想他也想要這個改變, – foxidrive

+0

@foxidrive連續2個或更多個相鄰的空字段無法正常工作。也不適用於領先/尾隨空字段。 –

+0

@Ansgar Wiechers是的,這不是很有用。在三個相鄰的領域,它跳過第二個領域,以及領先和尾隨領域。 – foxidrive

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 
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 

現在interweb仙女終於回到船上,這裏是我的版本...

+0

感謝您的幫助 – user1870243

+0

我試過這段代碼和代碼的答案。我得到的結果是一個Coloumn =兩個符號。所以我可能會做一些不正確的事情,或者做得不好。我有一個csv文件,例如ID, - ,C,並且我想將其更改爲ID,C,0,198,mm, – user1870243

+0

對不起,在完成之前,例如 - ,IM ,, 198,0, 0,198,0,下面是我輸入的代碼@ECHO OFF SETLOCAL ( FOR/f「delims =」%% IN(recon_S21206.csv)DO( SET「line = %% i」&CALL:PROCESS ) )> new.csv GOTO:EOF :過程 集線=%行:=% 集線=%線: - = 0% 組LINE2 =%線:,, = 0 ,! 「 如果不是」%line%「==」%line2%「GOTO過程 如果」%line:〜0,1%「==」,「SET line = 0%line% ECHO%line% GOTO:%EOF – user1870243