次のようなコンテンツを含むタブ区切りのCSVファイル(test.txt)があります(私のCSVにはヘッダーがありません)。
12.33 Apple Orange "this is" great "to eat"
10.99 Pear Lemon "this" is an - "aquired taste"
データを配列にインポートするために、次の両方を試しました。
$Headers = "price","item1","item2","desc"
[array]$arrCSVobjects = import-csv "test.txt" -Delimiter "`t" -Header $Headers
(または)
$Headers = "price","item1","item2","desc"
[array]$arrCSVobjects = Get-Content -Path "test.txt " | Out-String | ConvertFrom-CSV -Delimiter "`t" -Header $Headers
これにどのようにアプローチしても、PSは配列内のDESC要素から開始(先頭)引用符を削除したいと考え続けます(結果は次のようになります-元のデータと同じではありません):
price item1 item2 desc
----- ----- ----- ----
12.33 Apple Orange this is great "to eat"
10.99 Pear Lemon this is an - "aquired taste"
元のデータと比較すると、引用符の一部が欠落していることがわかります。 PSがこのような要素から引用符を削除するのを停止(防止)するにはどうすればよいですか? CSVをインポートし、データを操作してから、別のCSVにエクスポートして戻す必要があります。インターネットで回答を検索するたびに、引用符を削除する方法について結果が得られますが、引用符を保持する方法が見つからないようです。インポートまたはエクスポートプロセスで引用符を削除したくありません。
前もって感謝します、
STGdb
ファイルが有効なCSVではありません。 (まあ、公式の標準はありませんが、事実上 1つあります。)二重引用符は、CSVで周囲のフィールドに対して特別な意味を持ちます。 「サラウンド」ではないものは、通常、次のように2倍にすることで、何らかの方法でエスケープする必要があります。
12.33 Apple Orange """this is"" great ""to eat"""
また、フィールド全体を二重引用符で囲む必要があります。そうしないと、パーサーが混乱します。そのため、フィールドは3つの二重引用符で開始および終了します。
ファイルの形式を変更できない場合は、タブを分割して自分で解析することができます。もちろん、これは、実際のフィールド内にタブがないことを保証できる場合にのみ機能します。タブは、フィールドセパレータとしてのみ使用する必要があります。
gc .\test.txt |
% { $f = $_ -split "`t"; [pscustomobject]@{price=$f[0];item1=$f[1];item2=$f[2];desc=$f[3]} }
出力:
price item1 item2 desc
----- ----- ----- ----
12.33 Apple Orange "this is" great "to eat"
10.99 Pear Lemon "this" is an - "aquired taste"