DfromChunk - 複数テキスト行からのDレコード作成

[ 英語 | 日本語 ]

[Dホームページへ]

形式

DfromChunk [ options ] [ -h header-line pattern | -d delimiter-line pattern ] [ -s field-name-separator pattern ] [ input-file.. ]

説明

DfromChunkは, 複数テキスト行のかたまり(chunk)からDレコードを作成する。 コンピュータの世界で,論理的なレコードというかたまりを テキストファイルで表現するために多くの方法が使われている。 一つは,論理レコードを1行として表現する方法 (たとえばCSVファイル)である。 もう一つは,1フィールドを1行として表現し, 論理レコードは複数行のかたまり(ここではchunkとよぶ) で表現する方法である。 Dレコード も,後者の方法の一つであるが,他にも多くの方法がある。 Eメールのヘッダはその一例で,Dレコードに似た構造を持っている。 ただし,行継続が許されている点,およびフィールド名区切りの COLON(:)のあとにSPACEがあってもよいという習慣になっている 点が異なる。 Windowsで使われる".ini"ファイルも後者の方法の例である。 .iniファイルは,セクションの開始を示すセクションヘッダ 行を持ち,フィールド名と値の区切りとしては EQUAL SIGN (=)を使用する。 DfromChunkは,これらのファイルからDファイルへ 変換するための一般化されたコンバータである。

オプションを指定しない場合,DfromChunkDcatと同じ働きしかしない。 オプション-d(デリミタ行パタン), オプション-h(ヘッダ行パタン), オプション-s(フィールド名区切りパタン), その他のオプションを指定することにより, DfromChunkは,多様な入力ファイルに対応できる。

最初に,デリミタ行(オプション-d)または ヘッダ行(オプション-h)によってchunkを 確定する。 次いで,コメント(オプション-r-R) が取り除かれ, 残った行から,オプション-sあるいは オプション-n-vに 従って,フィールド名および値が取り出される。

デリミタ行

オプション-hが指定されていない場合, chunkはデリミタ行の次行(またはファイルの先頭)から 次のデリミタ行(またはファイルの終端)の前行までとなる。 デリミタ行は,オプション-dで指定された 正規表現 にマッチする行である。 オプション-dが指定されていない場合,空行を意味する "^$"が使われる。

ヘッダ行

オプション-hが指定されると,chunkは, ヘッダ行から次のヘッダ行(またはファイルの終わり)まで となる。 ヘッダ行は,オプション-hで指定された 正規表現 にマッチする行である。 ファイルの先頭から最初のヘッダ行までの行は,捨てられる。 オプション-hとオプション-dの双方が指定されていた場合, オプション-dは無視される。

行継続

オプション-cまたは-Cが指定されると Chunkに対して行継続処理が行われる。 オプション-cが指定されると, 行の終わりがREVERSE SOLIDUS ('\')の行は そのREVERSE SOLIDUSを取り除いて次の行と連結される。 オプション-Cが指定されると, 1つ以上の空白で始まる行は,その空白を1文字のSPACE に縮約して前行と連結される。

オプション-cとオプション-Cが同時に指定された場合, 双方の行継続処理が行われるが,-cの処理が先に行われ, その後に-Cの処理が行われる。

コメント(コメント行,行内コメント)

オプション-rによってコメント行パタンが 指定された場合,このパタンにマッチする行は chunkから取り除かれる。

オプション-Rによって行内コメントパタンが 指定された場合,各行内でこのパタンにマッチする 最初の部分文字列は,その行から取り除かれる。

フィールド名およびフィールド値

ヘッダ行からは, 既定フィールド名"HDR"をもったDフィールドが 作成される。 フィールド値はヘッダ行全体である。 ただしヘッダ行パタンの 正規表現が "()"を使用していた場合には, 最初の"()"にマッチした部分のみがフィールド値 となる。

既定フィールド名"HDR"は,オプション-H によって他の名称に変えることができる。

ヘッダ行以外の行に対しては,-nが指定されていない場合, セパレータ検査が行われる。 各行は,-sオプションでしていされた 正規表現 field-name-separator patternとマッチングされる。 マッチした場合,マッチした部分の前の部分がフィールド名, マッチした後ろの部分がフィールド値としてDフィールドが作成される。 field-name-separator patternがマッチしなければ エラーフィールド(後述)として扱われる。 オプション-sが指定されていない場合, ":"がfield-name-separator patternとして使用される。

アドバンスト解析

オプション-nが指定された場合,chunk中の各行に対し アドバンスト解析が行われる。 この場合,オプション-sは,指定しても無視される。

オプション-nで指定される field-name-part-patternが, 各行とマッチングされ, マッチした場合,pattern中の最初の "()" にマッチした部分が フィールド名として抽出される。 pattern中に"()" がなければ,マッチした部分全体が フィールド名として抽出される。 patternが行にマッチしなければ,その行は エラーフィールド(後述)として扱われる。

オプション-nのpatternがマッチした場合, その行は,オプション-vで指定されるfield-value-part pattern とマッチングされる。 マッチした場合,pattern中の最初の "()" にマッチした部分が フィールド値として抽出される。 pattern中に"()" がなければ,マッチした部分全体が フィールド値として抽出される。 field-value-part patternがマッチしない場合, フィールド値は空文字列となる。

オプション-nが指定されていてオプション-vが内場合, field-name-part-patternにマッチした部分の後ろがフィールド値となる。

エラーフィールド

フィールド名が抽出できなかった行はエラーフィールドとして捨てられる。 ただし,オプション-kを指定することにより,エラーフィールド行を "ERR"という既定フィールド名のフィールドとして残すこともできる。 こnフィールド名"ERR"は,オプション-Kにより別の名前 に変えることもできる。

オプション

-d delimiter-line pattern
デリミタ行のパタンを正規表現で指定する。 省略時は"^$"。 説明中の デリミタ行参照。
-h header-lin pattern
ヘッダ行のパタンを正規表現で指定する。 説明中の ヘッダ行参照。
-H field-name
ヘッダ行フィールドのフィールド名を指定する。
-s field-name-separator pattern
フィールド名とフィールド値の区切りのパタンを正規表現で指定する。 省略時は":"。 説明中の フィールド名とフィールド値参照。
-n field-name-part pattern
フィールド名部分となるパタンを正規表現で指定する。 説明中の アドバンスト解析参照。
-v field-value-part pattern
フィールド値となるパタンを正規表現で指定する。 説明中の アドバンスト解析参照。
-r comment-line pattern
コメント行のパタンを正規表現で指定する。 説明中の Remarks参照。
-R inline-comment pattern
行内コメントとなる文字列のパタンを正規表現で指定する。 説明中の See Remarks参照。
-c
REVERSE SOLIDUS (\)による行継続。 説明中の 行継続参照。
-C
空白で開始する行による行継続。 説明中の 行継続参照。
-k
エラーフィールドを残す。
-K field-name
オプション-kで残されるエラーフィールドの フィールド名を与える。 省略時は"ERR"。
-F
"filename"フィールドを出力各レコードに付加する。 値は,シェルから渡された入力ファイル名である。 入力ファイルが標準入力の場合このフィールドは付加されない。
-D [i/o]datautf=8|16|32
UTF入出力機能参照。

既定フィールド名

HDR:
各出力レコードの先頭。 オプション-hが指定されて,オプション-Hがない場合,
ERR:
オプション-kが指定され,オプション-Kがない場合。
filename:
オプション-Fが指定された場合。 各出力レコードの最後。

環境変数

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

使用例

".ini" ファイルを読む。

DfromChunk -h "^\[(.*)\]" -H section -s "=" -r "^;" input-file

メールヘッダ(メールボディなし)を読む。

DfromChunk -s ": *" -C input-file

メッセージ

マニュアル D_msg参照。

参照

DintroDfromLineDfromCsvDfromHtmlD_msg

AUTHOR

MIYAZAWA Akira


miyazawa@nii.ac.jp
2013