DfromCsv [ -F ] [ -t separator ] [ input-file.. ]
DfromCsv はcsv(Comma Separated Value)ファイルを Dファイルに変換する。
各csvファイルの先頭の行は, フィールド名を示すラベル行であること。 その他の行はデータ行でDレコードに変換される。 データ値が改行文字を含むとき,対応するDフィールドが リピーティングフィールドとなる。 オプション-Fを指定すると, 各Dレコードの最後にfilename:フィールドが 加えられる(入力ファイルが標準入力の場合をのぞく)。
Csvファイルの変換には DfromLine -t , -z q field-name-list を使ってもよい。 ただし,DfromCsvではフィールド名をラベル行から とるのに対し, DfromLine フィールドフォーマットリストとして与える必要がある。 Csvの値がQUOTATION MARKの中で改行文字を含むとき DfromCsvはリピーティングフィールドを 作るのに対し,DfromLineは改行文字を -nオプションで指定した文字列に置き換える。 さらに, DfromCsvと Dフォーマットの間では, QUOTATION MARKの扱いに若干の違いがある。
ここに示すCSVフォーマット仕様は, このプログラムの解釈である。 かの有名なソフトウェアとの互換性はあるが, その他のソフトウェアとの互換性は保証できない。 Csvフォーマットのその他の変種を変換するには, DfromLine を使用すればよりフレキシブルな(したがって面倒な) 指定が可能である。
Csvファイルはカレントロケールのもとでのテキストファイルである。 2行以上からなり,最初の行はラベル行でカラムのラベルを示す。 2行目以降はデータ行で,データ値を示す。 (もし,ラベル行が1行目でない場合, 何らかの方法で1行目にもってくる必要がある)。
行はCOMMA (,)で値に区切られる。 値がQUOTATION MARK (")で始まるとき, 閉じるQUOTATION MARKまでの文字が一つの値となる。 QUOTATION MARKの中で2文字連続のQUOTATION MARKが あらわれると,この2文字は一つのQUOTATION MARKに 変換され閉じるQUOTATION MARKとはならない。
QUOTATION MARK中ではCOMMAは通常の文字となり, 改行文字も通常の文字として扱われる。 したがって,csvの1ラベル行または1データ行は, テキストファイルとしての2行以上にわたることがある。
データ値に改行文字があると DfromCsvは値を改行文字で区切り, 同一フィールド名で複数のフィールドを作る。 ラベル値の中での改行文字は無視される。
これら以外のすべての文字は,通常の文字である。 多くのUNIXアプリケーションが特殊文字とする REVERSE SOLIDUS (\) もDfromCsv 中ではただの文字である。 SPACEも例外ではない。 ある種のcsvファイル仕様ではCOMMAのあとのSPACEを 区切りの一部として扱うが,DfromCsv ではそうしない。 これらのSPACEも区切りの一部として扱いたいのであれば, csvファイルを前処理(たとえばsedで), あるいは出力されたDファイルを後処理 (たとえば,Ded FIELDS = FIELDS SUBST "^ +" BY ""で)するとよい。
通常はない場合であるが, 入力ファイルにデータ行がないときは, その入力ファイルに対する出力は作成されない。 データ行の値の数がラベルの数より少ない場合, あまったラベルに対するDフィールドは出力されない。 逆にデータ行の値の数がラベル行より多いとき, 最後のラベルでフィールドが繰り返される。
さらに,QUOTATION MARKが通常でない現れ方をする 場合は次のようになる。 値がQUOTATION MARKで始まらないのに,途中でQUOTATION MARK が現れた場合,このQUOTATION MARKは通常の文字として扱われる。 (UNIX Shellの場合と異なる)。 閉じるQUOTATION MARKの後ろが区切り字でなかった場合, 次の区切り字までの文字列は値の一部として扱われる。
Csvファイルdata.csv からDファイルdata.d を作成する。
DfromCsv data.csv > data.d
CsvファイルSheet1.csv, Sheet2.csvおよびSheet3.csv からDファイルを作成して標準出力に出す。 出力Dレコードにはfilename:フィールドを付加する。
DfromCsv -F Sheet1.csv Sheet2.csv Sheet3.csv
マニュアル D_msg 参照。
MIYAZAWA Akira