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ファイルへ 変換するための一般化されたコンバータである。
オプションを指定しない場合,DfromChunkは Dcatと同じ働きしかしない。 オプション-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により別の名前 に変えることもできる。
".ini" ファイルを読む。
DfromChunk -h "^\[(.*)\]" -H section -s "=" -r "^;" input-file
メールヘッダ(メールボディなし)を読む。
DfromChunk -s ": *" -C input-file
マニュアル D_msg参照。
MIYAZAWA Akira