Designer:CSVファイルの1行目(ヘッダ項目行)を切り出す


他システムから連携された次のような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行目を切り出す設定例をご紹介します。

f:id:xoblos:20200211100255p:plain

%ComSpec%

/c powershell (Get-Content "INPUT\in.csv")[0..0] > "WORK\head.csv"

 

Get-Content コマンドはテキストファイルの内容を出力するコマンドで、[開始行番号..最終行番号] を付加することにより、出力行の範囲を選択することができます。行番号は0番始まりなので、先頭行(1行目)の行番号は0番となります。

 

Get-Content コマンドは、DOSプロンプトの type コマンドと同等の機能なので、type の方が慣れている場合は、以下のようにアライアスである type コマンドでも同様に設定できます。

f:id:xoblos:20200211101717p:plain