他システムから連携された次のようなCSVファイルがあったとします。
INPUT\in.csv
プロジェクト,金額(売上),金額(原価) プロジェクトA,1000,500 プロジェクトA,3300,2000 プロジェクトA,1500,800 プロジェクトB,2200,1000 プロジェクトB,2500,1300 プロジェクトC,1500,800 プロジェクトC,3200,2000 プロジェクトC,2800,1800
このCSVファイルを処理し(プロジェクトごとの金額集計など)、同形のヘッダ項目行を付けて他システムに戻す要件がある場合、 ちょっとやっかいな問題が起こります。
このCSVファイルを、「変換(CSV→抽出データ)」手順でそのままXMLファイルに変換しようとすると、項目名「金額(売上)」、「金額(原価)」に含まれるカッコ記号が、 XML項目名としては不正な文字のため、変換時にエラーになってしまいます。
このため、いくつかの手順で調整する手間が増えるため、入力CSVファイルからヘッダ項目行(1行目)を次のようにファイルに切り出し、最後に集計結果の先頭行に付加できたら、と思ったことはありませんか?
WORK\head.csv
プロジェクト,金額(売上),金額(原価)
ここでは、「外部アプリの実行」手順でpowershellを使い、CSVファイルの1行目を切り出す設定例をご紹介します。
%ComSpec%
/c powershell (Get-Content "INPUT\in.csv")[0..0] > "WORK\head.csv"
Get-Content コマンドはテキストファイルの内容を出力するコマンドで、[開始行番号..最終行番号] を付加することにより、出力行の範囲を選択することができます。行番号は0番始まりなので、先頭行(1行目)の行番号は0番となります。
Get-Content コマンドは、DOSプロンプトの type コマンドと同等の機能なので、type の方が慣れている場合は、以下のようにアライアスである type コマンドでも同様に設定できます。