私は、次の抽出物の行を含むCSVファイルを持っている:ソートおよびエクスポート-CSV
"EmployeeID","FirstName","LastName","Location","Department","TelephoneNo","Email"
"000001 ","abc ","def ","Loc1"," "," ","[email protected] "
"000023 ","ghi ","jkl ","Loc2"," "," ","[email protected] "
"000089 ","mno ","pqr ","Loc2"," "," ","[email protected] "
がどのように私は引用符を維持し、並べ替えやcsvファイルとして保存できますか?
私はCSVファイルに列のための二重引用符を持っていないと動作します次のPowerShellソーススクリプトを持っている:
Get-Content $Source -ReadCount 1000 |
ConvertFrom-Csv -Delimiter $Delimiter |
Sort-Object -Property $NamesOfColumns -Unique |
ForEach-Object {
# Each of the values in $ColumnValueFormat must be executed to get the property from the loop variable ($_).
$values = foreach ($value in $ColumnValueFormat) {
Invoke-Expression $value
}
# Then the values can be passed in as an argument for the format operator.
$ShowColsByNumber -f $values
} |
Add-Content $Destination;
$Source
、$Delimiter
、$NamesOfColumns
と$ColumnValueFormat
が与えられまたは動的に構築されています。非引用されたcsvファイルで
$ColumnValueFormat
は含まれています
$_.EmployeeID.Trim()
$_.FirstName.Trim()
$_.LastName.Trim()
$_.Location.Trim()
$_.Department.Trim()
$_.TelephoneNo.Trim()
$_.Email.Trim()
$ColumnValueFormat
引用されたcsvファイルで含まれています
$_."EmployeeID".Trim()
$_."FirstName".Trim()
$_."LastName".Trim()
$_."Location".Trim()
$_."Department".Trim()
$_."TelephoneNo".Trim()
$_."Email".Trim()
問題は、列のヘッダーを配置している$ColumnValueFormat
をベースにしているようです二重引用符で囲みます。
- 二重引用符で囲まれた列見出し:(私はそれらを削除した場合、私はそれが行を処理しているとき、コマンドレットの内部は、列見出しを認識することを確認していない)
私は2つの問題を抱えています。この問題は、行を処理しないので、二重引用符で列見出しを配置している
$ColumnValueFormat
に基づいているようです。 (二重引用符を削除すると、行を処理しているときに見出しが認識されません)。 - 私が最後に気づいたもう一つの問題は、最後の列が空白で、それがヌルだと思っている場合で、
Invoke-Expression $value
が実行されます($value
は最後の列式が$_.Email.Trim()
です - 引用されていないCSVファイル)。ステートメントをtry/catchブロックに配置しようとすると、無視されます。最後の列は$values
配列に追加されず、再び爆弾になります。プロパティ名の周り
スクリプトで達成したいことはありますか? –
返信ありがとうございます。単にCSVファイルを処理するには、CSVファイルにカラムの二重引用符が含まれているかどうか、最後のカラムに空白が含まれていれば$ _。Emailを含むInvoke-Expression $値が許可されます。Trim()式を実行して、空白を含む$ values配列に余分な要素を配置できるようにします(ForEachループの完了によって割り当てられます)。 –