最初の 17 行が空白のレコードが 9787 件あります。これらの 17 行をファイルの最後に移動したいと思います。どうやってやるの?
2 に答える
以下は、SORTOUT DD の末尾にある空白行を使用して入力データセットを並べ替えます。
//SORT EXEC PGM=SORT
//SYSOUT DD SYSOUT=*
//SORTWK01 DD SPACE=(CYL,(10,5),RLSE)
//SORTWK02 DD SPACE=(CYL,(10,5),RLSE)
// SORTWK03 DD SPACE=(CYL,(10,5),RLSE)
//SORTIN DD DSN=INPUT.DATASET,DISP=SHR
//SORTOUT DD SYSOUT=*
//SYSIN DD *
SORT FIELDS=(1,80,CH, D)
//*
FIELDS=(1,80,CH,D) は、文字データを使用して 80 文字を位置 1 から降順にソートしていることを意味します。
データセットの幅が 80 文字を超える場合は、実際の幅をここに入力する必要がある場合があります。そうしないと、最後に空白行が配置されない可能性があります。
データをソートする必要はありません。データ行が 1) レコード全体の順序で、2)降順であったことは幸運です:-)。
これにより、各レコードの「末尾」にシーケンス番号が追加され、各レコードが一時的に拡張されます (拡張には 5 桁が必要です)。OUTFIL OMIT を使用すると、データの最初の 17 レコードからのブランク行がドロップされます。TRAILER1 と「スラッシュ演算子」「/」を使用すると、ファイルの「末尾」に 17 行の空白行が追加されます。REMOVECC は、TRAILER1 (レポート機能) が追加するプリンター制御文字を持たない必要があるためです。OUTFIL の BUILD は、レコードを元のサイズに戻し、5 桁のシーケンス番号を削除します。
OPTION COPY
INREC IFTHEN=(WHEN=INIT,OVERLAY=(81:SEQNUM,5,ZD))
OUTFIL OMIT=((1,80,CH,EQ,C' ',
AND,81,5,ZD,LE,17)),
BUILD=(1,80),
REMOVECC,
TRAILER1=(/,/,/,/,/,/,/,/,/,/,/,/,/,/,/,/)