2013-07-14 3 views
2

.bat 파일을 사용하여 매일 생성되는 CSV를 이동합니다. CSV 파일 정리

csv로는 20 선 모든 공간을 0

  • 찾기에 0
  • 제거하여 빈 셀을 교체 "-"

    • 찾기 및 바꾸기 : 지금 그것을 정리해야 .

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

    배치 파일은 이것을위한 좋은 도구가 아닙니다.

    (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를 : 당신은 사용 PowerShell을 해제 훨씬 좋을 것 ...

    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입니다. 그래서 나는 틀린 일을 잘못하고 있거나 잘못 설명했을 것입니다. ID, C, 0 C, 0,198, mm, – user1870243

    +0

    으로 변경하고 싶습니다. 미안 해요. 예를 들어, - IM, 198,0, 0, IM, 0,198,0 이하는 @ECHO OFF로 입력 한 코드입니다. SETLOCAL ( ) /f "delims ="%% i IN (recon_S21206.csv) DO ( SET "line = %% i"& PROCESS ) )> new.csv GOTO : EOF : 프로세스 세트 라인 = % 줄 = % 세트 라인 = % 선 - = 0 % 세트 호선 = % 행 : ,, = 0,! " "% line % "=="% line2 % "GOTO 프로세스가 아닌 경우 "% line : ~ 0,1 % "==", "SET 라인 = 0 % 라인 % ECHO % line % GOTO : % EOF – user1870243