■  SORTでレコードまたは項目をTRIMする方法

SORTでレコードまたは項目をTRIMする方法です。
DFSORTでは、SQUEEZE関数を使ってレコードまたは項目をTRIMすることができます。

その1〜単純な例

  //SORT  EXEC SORT
  //SYSPRINT DD SYSOUT=*
  //SORTIN   DD *
  11111     ,"あああ  いい ",    123,456,@@@@@@@@@@
    22222   ,"え       ",          1,%%%%%%%%%%
        3333,"おおおおおおおお",12345678901,##########
  //SORTOUT  DD SYSOUT=*
  //SYSIN    DD  *
  OPTION COPY
  OUTREC FIELS=(1,80,SQZ=(SHIFT=LEFT,PAIR=QUOTE)    ←入力レコードの1〜80バイト空白を削除して左詰め。クォーテーションで囲まれた部分はそのまま
  /*
          実行結果

********************************** TOP OF DATA **********************************
11111,"あああ  いい ",123,456,@@@@@@@@@@
22222,"え       ",1,%%%%%%%%%%
3333,"おおおおおおおお",12345678901,##########
********************************** BOTTOM OF DATA *******************************




その2〜固定長ファイルから可変長CSVファイルを作る例

  //SORT  EXEC SORT
  //SYSPRINT DD SYSOUT=*
  //SORTIN   DD *
  11111     ,"あああ  いい ",    123,456,@@@@@@@@@@
    22222   ,"え       ",          1,%%%%%%%%%%
        3333,"おおおおおおおお",12345678901,##########
  //SORTOUT  DD DSN=TEST.CSV.FILE,DISP=(NEW,CATLG),SAPCE=(CYL,(1,1),RLSE),
  //         DCB=(RECFM=VB,LRECL=23000,BLKSIZE=23004)  ←DCBは可変長で!
  //SYSIN    DD  *
  OPTION COPY
  OUTFIL FNAMES=SORTOUT,FTOV,VLTRIM=C' '←詳しくはここを見てください
  OUTREC FIELS=(1,80,SQZ=(SHIFT=LEFT,PAIR=QUOTE)
  /*

   見た目の実行結果は、その1と同じです




その3〜全ての空白を無条件に削除!

  //SORT  EXEC SORT
  //SYSPRINT DD SYSOUT=*
  //SORTIN   DD *
  11111     ,"あああ  いい ",    123,456,@@@@@@@@@@
    22222   ,"え       ",          1,%%%%%%%%%%
        3333,"おおおおおおおお",12345678901,##########
  //SORTOUT  DD SYSOUT=*
  //SYSIN    DD  *
  OPTION COPY
  OUTREC FINDREP=(IN=C' ',OUT='')    ←出力に空白あったら削除
  /*
          実行結果

********************************** TOP OF DATA **********************************
11111,"あああいい",123,456,@@@@@@@@@@
22222,"え",1,%%%%%%%%%%
3333,"おおおおおおおお",12345678901,##########
********************************** BOTTOM OF DATA *******************************



その4〜全ての空白を無条件にゼロパディング !

  //SORT  EXEC SORT
  //SYSPRINT DD SYSOUT=*
  //SORTIN   DD *
  11111     ,ABC     XYZ,    123,456,@@@@@@@@@@
    22222   ,           ,          1,%%%%%%%%%%
        3333,     99.999,123456789.1,##########
  //SORTOUT  DD SYSOUT=*
  //SYSIN    DD  *
  OPTION COPY
  OUTREC FINDREP=(IN=C' ',OUT='0')    ←出力に空白あったらで置き換え
  /*
          実行結果

********************************** TOP OF DATA **********************************
1111100000,ABC00000XYZ,0000123,456,@@@@@@@@@@
0022222000,00000000000,00000000001,%%%%%%%%%%
0000003333,0000099.999,123456789.1,##########
********************************** BOTTOM OF DATA *******************************




【主なSQZの形式】
タイプ 説明
SQZ=(SHIFT=LEFT)先頭の空白を削除し、左詰めにします
SQZ=(SHIFT=RIGHT)末尾の空白を削除し、右詰めにします

※先行のゼロを削除するためにPREBLANK=C'0'パラメータを使う方法もありますが、DFSORTのバージョンによって、 かなりへんな動きをしますので、ご注意ください。
 また、SQZパラメータの省略形もDFSORTのバージョンによって違うやつがります。


BEFORE PAGE

TOP PAGE