いくつかのフィールドに新しい行が埋め込まれた大きなCSVファイルがあります。新しい行が埋め込まれたフィールドを持つ行を含むCSVをインポートすると、Excel 2016でエラーが発生します。これは、powershellのオブジェクトのすべてのプロパティのテキストを置き換える最善の方法ですか?
this postに基づいて、任意のフィールドの新しい行をスペースで置き換えるコードを書いています。以下は、機能と問題を複製するコードブロックです。オプション1が動作します。コメントアウトされているオプション2は、オブジェクトを文字列にキャストします。私は、オプション2がより速く動くことを望んでいました。
質問:非常に大きなファイルを処理するパフォーマンスを最適化するためのよりよい方法がありますか?
$array = @([PSCustomObject]@{"ID"="1"; "Name"="Joe`nSmith"},
[PSCustomObject]@{"ID"="2"; "Name"="Jasmine Baker"})
$array = $array | ForEach-Object {
#Option 1: produces an Object, but is code optimized?
foreach ($n in $_.PSObject.Properties.Name) {
$_.PSObject.Properties[$n].Value = `
$_.PSObject.Properties[$n].Value -replace "`n"," "
}
#Option 2: produces a string, not an object
#$_ = $_ -replace "`n"," "
$_
}
私の実際の使用の場合には、各行は> 15個のフィールドがあり、それらの任意の組み合わせが埋め込まれた1つの以上の新しい行を有することができることに注意してください。
私はforeachのはをForEach-Objectに比べて高速であることをどこかで読ん続いているよりもはるかに高速です。 ストップウォッチクラスで言及した両方のシナリオのテストを行うことができます。そのようにそれを活用する: $ resultstime =新しいタイムスパン-Minutes 1 $ resultstime = [diagnostics.stopwatch] :: StartNew() $ resultstime.Elapsed それは –
おかげマーティン:)を停止することを忘れないでください。私はストップウォッチクラスを使用して、@ wOxxOmからの提案と比較して私の元のコードの時間を使います。 –
あなたの所見を共有してください:) –