2016-06-23 4 views
0

매일 나는 시스템으로 가져올 많은 CSV 파일을 얻습니다. 하지만 가져 오기 전에 모든 항목을 UTF-8로 인코딩 한 다음 하나씩 업로드해야합니다. 그래서 모든 * .csv 파일을 UTF-8로 인코딩 한 다음 하나의 파일에 병합하는 스크립트가 필요했습니다.Out-File 탭으로 구분 된 파일 문제

스크립트가 정상적으로 작동하지만 파일을 내보낼 때 첫 번째 탭이 제거되어 큰 문제가됩니다.

가 인코딩 및 합병되기 전에 하나의 파일 모양을

:

USERID ACTIVE FIRSTNAME LASTNAME EMAIL LANGUAGE HOSTPRIVILEGE TIMEZONE DIVISION DEPARTMENT PROJECT OTHER CUSTOM5 CUSTOM6 CUSTOM7 CUSTOM8 CUSTOM9 CUSTOM10 COUNTRY 
    Y <firstname> <lastname> <[email protected]> de <text> <text>       <randomnumber>    

(그것은 유래는 ... 단지 noobish하는 탭이나 메신저를 좋아하지 않는다, 다음과 같습니다 S를?) 실제로

두 번째 행은 하나의 탭으로 시작하고 모든 "블록"은 하나의 탭으로 분리됩니다. 마지막 하나를 제외하고 ther은 "text"와 "random number"사이의 7 개 탭입니다. 내가 스크립트를 실행하면

그것은 다음과 같습니다

USERID ACTIVE FIRSTNAME LASTNAME EMAIL LANGUAGE HOSTPRIVILEGE TIMEZONE DIVISION DEPARTMENT PROJECT OTHER CUSTOM5 CUSTOM6 CUSTOM7 CUSTOM8 CUSTOM9 CUSTOM10 COUNTRY 
Y <firstname> <lastname> [email protected] de <text> <text>       <randomnumber>    
Y <firstname> <lastname> [email protected] de <text> <text>       <randomnumber> 

첫 번째 탭이 손실됩니다.

Copy-Item ".\1_Input\*.csv" ".\2_cache" 
Get-ChildItem ".\2_Cache\*.csv" | foreach { 
    (Get-Content $_.FullName) | Set-Content $_.FullName -Encoding UTF8 
} 
ls ".\2_cache" -Fi *.csv | ipcsv | 
    ConvertTo-Csv -NoTypeInformation | 
    % { $_ -replace '"', ''} | 
    Out-File ".\3_output\concat.csv" -fo -en utf8 
Remove-Item ".\2_cache\*.csv" 

편집 :

그리고 여기에는 PowerShell 스크립트입니다 나는 "해결 방법"을 발견, 내가 매개 변수를 추가

ipcsv -delimiter "`t" 

하지만 난 를 ConvertTo에 매개 변수를 추가 할 때 나는 오류를 얻을 -CSV. 이제는 구분 기호 ","와 함께 내보내집니다. 그러나이 시스템은 고맙게도 쉼표로 구분 된 임포트를 읽을 수 있습니다.

답변

1

원하는 경우 파일을 UTF-8로 변환 한 다음 연결하면 한 파일에서 헤더 행을 가져 오는 것이 훨씬 간단 해지고 출력 파일에 모든 파일의 헤더를 건너 뜁니다. :

$files = @(Get-ChildItem '.\1_Input\*.csv') 
$outfile = 'concat.csv' 

Get-Content $files[0] -TotalCount 1 | Set-Content $outfile -Encoding UTF8 
$files | ForEach-Object { 
    Get-Content $_.FullName | Select-Object -Skip 1 
} | Add-Content $outfile -Encoding UTF8 
+0

감사합니다. 완벽합니다. 최종 스크립트를 .exe로 "변환"하여 "인형"이라 할지라도이를 사용할 수 있어야합니다. 그러나 카스퍼 스키 안티 바이러스는 이것을 트로이 목마로 인식합니다. 젠장. 어쩌면 내가 .ps1 스크립트를 유지할 것입니다. 편집 : PS2EXE를 사용하여 누군가가 알고 싶다면 스크립트를 "변환"합니다. – Shunator

+0

대신 PowerGUI를 사용해보십시오 (무료). 아마도 카스퍼 스키를 더 잘 해결할 것입니다. 어떤면에서는 화이트리스트 시스템이 있어야합니다. – sodawillow

관련 문제