2012-09-05 52 views
2

我有一個CSV文件使用不同於默認值的不同引號和文本分隔符。我知道分隔符有一個不同的分隔符的選項,但我無法找到如何擺脫引號字符。在powershell中使用不同的分隔符和引號導入csv

Import-Csv 'C:\test.txt' -Delimiter "(character U+0014 is used here, won't show here)" 

但是引號字符是U + 00FE,我需要刪除這個,所以我可以得到沒有任何特殊字符的文本。我不想把它寫到一個新文件中。我想將csv導入一個變量,所以我可以對它做一些分析。例如,看看一個字段是否爲空。

任何想法?

回答

6

分隔符實際上不是一個問題,因爲你可以做到這一點

-Delimiter "$([char]0x14)" 

至於報價,你可以使用一個預處理步驟,然後用ConvertFrom-代替Import-CSV

Get-Content test.txt | 
    ForEach-Object { $_ -replace ([char]0xFE) } | # to remove the 「quotes」 
    ConvertFrom-CSV -Delimiter "$([char]0x14)" 

如果你的行包含嵌入式引號,那麼它需要更多的工作,並且可能更容易僅僅強制引用每個字段:

$14 = "$([char]0x14)" 
$_ -replace ([char]0xFE) -replace '"', '""' -replace "(?<=^|$14)|(?=`$|$14)", '"' 
+0

只需稍作說明 - 這兩行在與Import-Csv一起使用時是等效的(因此我假定ConvertFrom-Csv也是這樣):'-Delimiter「$([char] 0x14)」'和'-Delimiter 0x14「所以不需要使用更復雜的形式。 –

+0

@msorens:哦,很好。我沒有真正測試它,說實話,但我知道字符串插值表單的工作。顯然,因爲'-Delimiter'需要一個'char' PowerShell自動轉換爲正確的東西(如果它是一個字符串則不會)。 – Joey

相關問題