2013-10-24 33 views
0

換行我有一個CSV文件,該文件是在下面的格式:PowerShell的CSV除去最後一個單元格

ID,Name,Notes,Status 
1,aaa,blah, 
blah2,status1 
2,bbb,foo,status1 
3,ccc,pow, 
pow2,status1 

正如你可以看到,一些在Notes列的單元格包含一個逗號和換行符。我需要將這些字符替換一個空間,聚集在新線插入前行的註釋單元格中的數據,同時還帶來了身份進入狀態欄,這樣它看起來就像這樣:

ID,Name,Notes,Status 
1,aaa,blah blah2,status1 
2,bbb,foo,status1 
3,ccc,pow pow2,status1 

我想出了下面的代碼片段:

(Import-Csv $reportfile) | % { 
    $_.Notes = $_.Notes -replace "`r`n",' ' 
    $_.Notes = $_.Notes -replace "`n",' ' 
    $_.Notes = $_.Notes -replace ',',' ' 
    $_ 
} | Export-Csv $newfile -NoTypeInformation 

的問題是,當文件是進口的,這是對本身就是一個行中的數據通過PowerShell的解釋爲一行。所以當我輸出時,它仍然保存在自己的行中。任何想法如何以不同方式導入文件並仍然完成從該列中替換那些不需要的字符?

+0

'Import-Csv'讀取一個文件並根據CSV文件的工作原理對其進行解釋。如果您的文件不是CSV文件或以某種方式違反了RFC 4180,那麼當然可能會有些奇怪。不過,您始終可以預先處理文件的內容並將它們傳遞給'ConvertFrom-Csv'。 – Joey

+0

如何預處理文件並只觸摸這些列,而不使用Import-CSV? – blizz

回答

1

你可以嘗試以下方法:

(Get-Content -ReadCount 0 $reportfile) -replace ',\r\n(?=\D)', ' ' -split "`r`n" | ConvertFrom-Csv 

(未經測試)

這將首先讀取該文件作爲一個字符串,然後在每行的後跟換行符結束更換一個逗號在一個空格處,然後在換行符處拆分字符串並將其傳遞給ConvertFrom-Csv

相關問題