ソートマージ


5.8.15 csvreorgオペランド

意味

CSVファイルの入力レコード編集フォーマットを指定します。

このオペランドは,CSVファイルを指定した場合だけ有効です。CSVファイル以外を指定した場合は,KBLS1522-Eエラーとなります。

形式
csvreorg=csv-reorganization-format [△csv-reorganization-format … ]

入力レコード編集フォーマットを指定します。

指定できるフォーマットの個数は,1〜128個です。

入力レコード中の編集するセル(以降,編集セルと呼びます)を指定した位置に置くことで,レコード形式を再編成する機能です。編集セルは,指定した順序に従って,前の編集セルの後方に隣接して置かれます。

csv-reorganization-formatの形式を次に示します。

csv-reorganization-formatオペランド形式1
[insert_cellpos]+cellpos [−cellnum]

入力レコード中のセルと,挿入位置を指定します。

  • [insert_cellpos]+cellpos [−cellnum]は必ず続けて指定してください。それぞれの値の間に空白やタブを指定しないでください。

  • [insert_cellpos]+cellpos [−cellnum]を複数指定する場合は,1個以上の空白またはタブで区切って指定します。

csv-reorganization-formatオペランド形式2
[insert_cellpos]+insertdatacnt

挿入データ形式と,挿入位置を指定します。

  • [insert_cellpos]+insertdatacntは必ず続けて指定してください。それぞれの値の間に空白やタブを指定しないでください。

  • [insert_cellpos]+insertdatacntを複数指定する場合は,1個以上の空白またはタブで区切って指定します。

指定値
insert_cellpos

insert_cellposに指定する値を次の表に示します。レコード内のセルの挿入位置(レコード編集後のセルの位置)を,番号で指定します。

指定値

機能

説明

0

連結

前に指定した編集セルまたは挿入データの内容に連結し,1つのセルとして配置します。指定した順番に,右側に連結していきます。

  • 直前に指定された編集セルが連続したセルの場合,最後のセルの内容に連結します。

  • 最初の編集フォーマットに挿入位置「0」を指定した場合,セル番号「1」からセルまたは挿入データを配置します。

  • 連結するセルの内容が引用符で囲まれている場合,引用符を除いたデータを連結し,最後にデータ全体を引用符で囲みます。

  • 連結する挿入データに改行文字やデリミタが指定されている場合,連結したデータを引用符で囲みます。

1〜16384

挿入

指定した位置に,指定した編集セルまたは挿入データを配置します。

  • レコードの先頭セル番号を「1」,最大セル番号を「n」とし,1〜nまでの番号を指定します。最大セル番号は,16,384番です。

  • 挿入位置は,フォーマット間で昇順となるように指定します。

  • 前の編集セル範囲または挿入データとの間に間隔が生じる場合には,NULLセル(空のセル)が作成されます。

「0」を指定した連結指定で,連結したデータを引用符で囲む場合の例を次に示します。

[図データ]

(凡例)

←:改行文字

出力セル1と3の内容が引用符で囲まれて出力されます。

  • 出力セル1:入力セル2の内容「123」に,入力セル1の内容「ABC」を連結し,引用符で囲む。

  • 出力セル2:入力セル3の内容「def」に,入力セル2の内容「123」を連結する。引用符はなし。

  • 出力セル3:デリミタを含む挿入データ「V,W」に,入力セル2の内容「123」を連結し,引用符で囲む。

  • 出力セル4:入力セル2の内容「123」に,挿入データ「xyz」を連結する。引用符はなし。

cellpos [−cellnum ]

レコード内の編集セルの位置と個数を指定します。

  • レコードの先頭セル番号を「1」,最大セル番号を「n」とし,1〜nまでの番号を指定します。最大セル番号は,16,384番です。

  • 連続したセルを指定する場合は,+cellposcellnumで番号と個数を指定します。例えば,「+5−3」と指定した場合,5〜7番目の3個の連続したセルが対象となります。

  • 連続したセルを指定した場合,insert_cellposで指定された挿入位置に,順番に挿入します。insert_cellposを省略した場合は,前の編集セルに隣接して挿入します。

  • 最後の編集セルに限り,[−cellnum]を省略できます。省略した場合,+cellposから実レコードの最後のセルまでを編集セル範囲として扱います。

  • [−cellnum]を省略し,+cellposで指定した編集セル位置が実レコードの最後のセルを超えた場合,編集セルの挿入は行いません。挿入する編集セルが存在しない場合の例題を次に示します。

    [図データ]

    [図データ]

    [図データ]

(凡例)

NULL:NULLセル(空のセル)

←:改行文字

insertdata

insertdataに指定する値を次の表に示します。

指定値

データ形式

X

空白

Z

ゼロ

NULL

NULLセル(空のセル)

C'文字列'

文字列(改行文字は指定できません)

X'16進数'

16進数

  • 16進数として指定できるのは「0〜9」および「A〜F」だけです。

  • 16進数に指定できる桁数は,次のとおりです。

    入力データのエンコード

    X'16進数'の指定桁数

    ASCII

    SJIS

    EUC-JP

    EUC-HJ

    UTF-8

    偶数桁

    UCS-2LE

    UCS-2BE

    UTF-16LE

    UTF-16BE

    4の倍数桁

    UCS-4LE

    UCS-4BE

    UTF-32LE

    UTF-32BE

    8の倍数桁

  • 挿入データに改行文字やデリミタが指定された場合は,引用符で囲んだ(改行文字とデリミタをエスケープする)形式にして出力します。

  • 入力データのエンコードが「UCS-2LE」,「UCS-2BE」,「UTF-16LE」または「UTF-16BE」である場合,「UCS-2」の文字コードのデータ形式となります。「付録H Unicode操作文字コード一覧(SORT EE)」の「表H-3 ASCII対応予約文字一覧」を参照してください。

  • 入力データのエンコードが「UCS-4LE」,「UCS-4BE」,「UTF-32LE」または「UTF-32BE」である場合,「UCS-4」の文字コードのデータ形式となります。「付録H Unicode操作文字コード一覧(SORT EE)」の「表H-3 ASCII対応予約文字一覧」を参照してください。

  • 入力データのエンコードが「EUC-HJ」で,マルチバイト文字を挿入する場合は「X'16進数'」形式で指定してください。

  • 改行文字は,「X'16進数'」形式で挿入指定できます。なお,「C'文字列'」形式では改行文字は指定できません。次に示す使い方で,挿入データ中に改行文字を指定できます。改行文字のデータ形式については,「付録H Unicode操作文字コード一覧(SORT EE)」の「表H-3 ASCII対応予約文字一覧」を参照してください。

入力データのエンコードに「SJIS」を指定した場合の例

[図データ]

  • 文字列または16進数データをexsortコマンドに指定する場合,フォーマット全体をダブルクォーテーションで囲んで指定してください。exsortパラメタファイルに指定する場合は,ダブルクォーテーションで囲まないでください。文字列データの指定例を次に示します。

    指定先

    記述例

    備考

    exsortコマンド

    csvreorg="1+2-1△+C'ABCD'-1"

    ダブルクォーテーションで囲みます。

    exsortパラメタファイル

    csvreorg=1+2-1△+C'ABCD'-1

    ダブルクォーテーションで囲みません。

−cnt

挿入データの繰り返し回数を,1〜65,535の5桁以内の数字で指定します。

  • +insertdataで挿入するデータの形式を指定した場合,この指定は省略できません。

  • 挿入データに「NULL(NULLセル)」を指定した場合,繰り返し回数は必ず1となります。2以上を指定しても1が仮定されます。

  • 「挿入データのバイト長×繰り返し回数」の値は,65,535バイト以下にする必要があります。

    注※ 16進数で指定した場合は,2桁で1バイトです。

注意事項
  • CSVファイルの編集機能では,-outfile,-catout,または-splitoutパラメタのreclenオペランド,およびminlenオペランドの指定は必須ではありません。reclenオペランドを省略した場合,CSVファイルの最大レコード長を仮定します。また,minlenオペランドを省略した場合,CSVファイルの最小レコード長の「0」を仮定します。CSVファイルの最大レコード長については,「表3-7 SORT EEのパラメタの最小値および最大値」を参照してください。

  • reclenおよびminlenオペランドを指定する場合,レコード編集後のレコード長(編集レコード長)は「minlen≦編集レコード長≦reclen」である必要があります。

    編集レコード長とreclen,minlenとの関係

    レコード編集結果

    minlen > 編集レコード長

    ×(KBLS1513-E)

    minlen ≦ 編集レコード長 ≦ reclen

    編集レコード長 > reclen

    ×(KBLS1511-E)

(凡例)

編集レコード長:レコード編集後のレコード長を示します。

○:レコード編集後のレコードをそのまま出力します。

×:括弧内に記載しているメッセージが表示され,エラーとなります。

  • -outfile,-catout,または-splitoutパラメタのcellnumオペランドを指定している場合,レコード編集後のレコードに対してセル数を調整して出力します。詳細は,「5.10.7 cellnumオペランド」を参照してください。

  • 挿入位置は,フォーマット間で昇順となるように指定してください。昇順となっていない場合,KBLS1519-Eエラーとなります。指定例を次に示します。

    正しい指定例:10+1-5 20+10-5

    誤った指定例:20+1-5 10+10-5

    (最初の挿入位置(20)と次の挿入位置(10)が逆転している)

  • -outfile,-catout,または-splitoutパラメタのrecsepaオペランドに指定した改行文字を付加します。recsepaオペランドの指定を省略した場合は,-inpfile,-catinp,または-splitinpパラメタのrecsepaオペランドの指定に従います。詳細は,「5.10.5 recsepaオペランド」を参照してください。

  • レコード編集では,セルとセルの間のデリミタは必ず1文字を配置します。入力レコードの連続したデリミタを1つのデリミタとして扱う「連続区切り文字オプション(INPCONSEPA)」を指定している場合でも,デリミタは1文字となります。連続しているデリミタは1文字にまとめられるので注意してください。

  • レコード編集を指定するとデリミタは必ず1文字で配置されるので,レコード出力時に連続したデリミタを1つのデリミタに置き換える「連続区切り文字オプション(OUTCONSEPA)」と同時に指定した場合,OUTCONSEPAオプションは無効となります。

  • 配置するデリミタは次の順番で決定されます。なお,複数のデリミタを指定している場合は,先頭に指定したデリミタとなります。

  1. -outfile,-catoutまたは-splitoutパラメタのcellsepaオペランドに指定したデリミタ

  2. 環境ファイルの「EXS_OUTCELLSEPA」に指定したデリミタ

  3. -inpfile,-catinp,または-splitinpパラメタのcellsepaオペランドに指定したデリミタ

  4. 環境ファイルの「EXS_CELLSEPA」に指定したデリミタ

  5. コンマ

  • 「-outfileパラメタ」の「csvformatオペランド」と同時に指定できません。同時に指定した場合はKBLS2388-Eエラーとなります。

  • 入力ファイルパラメタ(-inpfile,-catinp,-splitinpパラメタ)の「csvreorgオペランド」および「-csvreorgパラメタ」は,環境変数「EXSORT64MAXRECLEN」と同時に指定できません。同時に指定した場合はKBLS1107-Eエラーとなります。

関連パラメタ・オペランド
  • -outfileパラメタ recsepaオペランド

  • -outfileパラメタ cellsepaオペランド

  • -outfileパラメタ cellnumオペランド

  • -outfileパラメタ reclenオペランド

  • -outfileパラメタ minlenオペランド

  • -inpfileパラメタ recsepaオペランド

  • -inpfileパラメタ cellsepaオペランド

  • -inpfileパラメタ codetypeオペランド

指定例

指定例はexsortパラメタファイルに指定した場合です。exsortコマンドに指定する場合は,フォーマット全体をダブルクォーテーションで囲んでください。

【例1】(入力データのエンコードに「SJIS」を指定した場合の例)

-inpfile
 fileorg=C
 recsepa=LF
 cellsepa='△'
 csvreorg=+1-3 +6-4 +X'FF'-3 11+10
 file=INFILE
-outfile
 recsepa=CRLF
 cellsepa=','
 file=OUTFILE
  • 入力レコードの改行文字(recsepa=LF):0x0A

  • 入力レコードのデリミタ(cellsepa='△'):半角空白

  • 編集セル1

    セル1〜3を,レコード先頭に挿入します。

  • 編集セル2

    セル6〜9を,編集セル1に隣接して挿入します。

  • 挿入データ

    X'FF'(3バイト)のデータを,編集セル2に隣接して挿入します。

  • 編集セル3

    挿入位置11番に,10番からレコード末尾までのセルを挿入します。挿入データとの間に生じた間隔(挿入位置9と10)にはNULLセルが挿入されます。

  • 出力レコードの改行文字を,「CRLF」に変更して出力します。(recsepa=CRLF)

  • 出力レコードのデリミタを,コンマに変更して出力します。(cellsepa=',')

    [図データ]

【例2】(入力データのエンコードに「SJIS」を指定した場合の例)

-inpfile
 fileorg=C
 recsepa=LF
 cellsepa='△'
 csvreorg=2+1-2 0+C'ABC'-1 7+7-1 0+X'0A'-1 0+5-1
 file=INFILE
-outfile
 file=OUTFILE
 quottype=3
  • 入力レコードの改行文字(recsepa=LF):0x0A

  • 入力レコードのデリミタ(cellsepa='△'):半角空白

  • 編集セル1(挿入)

    挿入位置2番から,セル1と2を挿入します。挿入位置との間に生じた間隔(挿入位置1)にはNULLセルが挿入されます。

  • 挿入データ(連結)

    挿入位置3番のセルの内容に,挿入データ「C'ABC'」を連結します。セルの内容の右側に連結します。

  • 編集セル2(挿入)

    挿入位置7番から,セル7を挿入します。挿入位置との間に生じた間隔(挿入位置4〜6)にはNULLセルが挿入されます。

  • 挿入データ(連結)

    挿入位置7番のセルの内容に,挿入データ「X'0A'(改行文字)」を連結します。セルの内容の右側に連結します。

  • 編集セル3(連結)

    挿入位置7番のセルの内容に,セル5の内容を連結します。セルの内容の右側に連結します。

  • セルを引用符で囲んで出力します。(quottype=3)

    [図データ]