■ 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ファイルを作る例
見た目の実行結果は、その1と同じです
//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) /*
▲その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 *******************************
【主なSQZの形式】
タイプ 説明 SQZ=(SHIFT=LEFT) 先頭の空白を削除し、左詰めにします SQZ=(SHIFT=RIGHT) 末尾の空白を削除し、右詰めにします
※先行のゼロを削除するためにPREBLANK=C'0'パラメータを使う方法もありますが、DFSORTのバージョンによって、 かなりへんな動きをしますので、ご注意ください。
また、SQZパラメータの省略形もDFSORTのバージョンによって違うやつがります。