DtoCsv - DファイルからCsvファイルへ

[英語 | 日本語 ]

[Dホームページへ]

形式

DtoCsv [ -p field-list ] [ input-file.. ]

説明

DtoCsvは,input-filesの Dレコードをcsv(Comma Separated Values)ファイルに 変換する。

入力Dファイルはそれぞれ, ラベル行と,後続するデータ行に変換される。 入力ファイルが複数ある場合,2番目の入力フィル から変換された各行は,最初のファイルからの最終行に すぐ続いて出力される。 (2番目以降のラベル行を 出力結果だけから識別することは,一般にはできない)。

ラベル行はCOMMA (,)で区切られた フィールド名からなる。 データ行はDレコードから作られ, その値は対応するDフィールドの値で, 必要な場合QUOTATION MARKでくくられる。 Dレコードに対応するDフィールドがない場合, 値はNULL文字列となる。 対応するフィールドが複数ある(リピーティングフィールドの) 場合,値を改行文字でつないで, QUOTATION MARKでくくる。

Dファイルにはフィールドのディレクトリはなく, また,ひとつのDファイルに異なる種類のDレコードが 入っていてもかまわないため, どのフィールドをいかなる順で出力するかを決めるのは 単純ではない。 このためDtoCsvには,出力前に インスペクションフェーズがある。 このフェーズでは出力を行わずに 入力レコードをため込んで, フィールド名とその順の調査を行う。 インスペクションフェーズが終わると DtoCsvはラベル行を書き出し, ため込んだレコードのデータ行を作成・出力し, 続いて入力ファイルの残ったレコードの変換を行う。 したがって,インスペクションフェーズで 現れなかったフィールドは出力されない

通常,DtoCsvは,インスペクションフェーズで, Dレコードを合計 8192文字(改行文字を含む)または 合計1024フィールドまで読み込む。 最初のレコードがこれに入りきらないほど大きい場合, スペースを拡張して最低1レコードは読み込む。

インスペクションフェーズにおける読み込みレコード数は, オプション-Direcsパラメータで制御できる。 DtoCsvは,インスペクションフェーズで 少なくともirecsレコードを読み込む。 irecsの省略時値は1である。

オプション -p field-list を指定すると,リストに現れたフィールドのみ リストの順で出力される。 この場合,インスペクションフェーズは 存在しない。

CSVフォーマット

ここに示すCSVフォーマット仕様は, このプログラムが作成するファイルの仕様で, かの有名なソフトウェアとの互換性はあるが, その他のソフトウェアとの互換性は保証できない。 Csvフォーマットのその他の変種にあわせた 出力をするためには, DtoLine を使えば,より細かい(したがって面倒な) 指定ができる。

ラベル行でもデータ行でも,値はCOMMA(,) で区切られる。 値にCOMMA,QUOTATION MARK(")または 改行文字が含まれる, もしくはSPACEが先頭または最後に含まれるとき, 値全体がQUOTATION MARKで囲まれる。 またこのとき,値中のQUOTATION MARKは, 2文字の連続したQUOTATION MARKに置き換えられる。

ラベル行とデータ行の値の個数はいつも等しい。

オプション

-p field-format-list
変換するフィールドとその順とを指定する。
-t separator
フィールドセパレータ(1文字) を指定する。省略時はCOMMA(,)。
-z quoting options
quoting optionsは, 文字q, Q and xの任意の組み合わせ。各々以下の意味を持つ。
q
QUOTATION MARK (")によるクォーティング。
Q
APOSTROPH (')によるクォーティング。
x
REVERSE SOLIDUS (\) によるクォーティング文字のエスケープ。 文字xが指定されていない場合, クォーティング文字の二重化 (""または''が一文字の "または'を示す。) によるエスケープとなる。
文字qQとがともに指定された場合, qが優先する。 省略時は,q
-D irecs=number-of-records
インスペクションフェーズで使用するレコードの 最低数を指定する。省略時は1。
-D [i/o]datautf=8|16|32
UTF入出力機能参照。

環境変数

Ddatautf, Didatautf, Dodatautf
UTF入出力機能参照。

使用例

Dファイルdata.dからcsvファイルdata.csv への単純な変換。最初の8192文字に含まれるフィールドが 変換対象となる。

DtoCsv data.d > data.csv

最初の100レコードですべてのフィールドが出現すると わかっているとき,-D irecs=を用いれば, すべてのフィールドが変換されることを保証できる。

DtoCsv -Direcs=100 data.d > data.csv

フィールドabc だけでcsvファイルを作る。

DtoCsv -p a,b,c data.d > data.csv

フィールド名を間違えると何も出力されない ので注意。警告メッセージもない。

メッセージ

マニュアル D_msg 参照。

参照

DintroDfromCsvDtoLineD_msg

AUTHOR

MIYAZAWA Akira


miyazawa@nii.ac.jp
2004