0

最初の 17 行が空白のレコードが 9787 件あります。これらの 17 行をファイルの最後に移動したいと思います。どうやってやるの?

4

2 に答える 2

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 文字を超える場合は、実際の幅をここに入力する必要がある場合があります。そうしないと、最後に空白行が配置されない可能性があります。

于 2011-07-29T10:10:34.767 に答える
1

データをソートする必要はありません。データ行が 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=(/,/,/,/,/,/,/,/,/,/,/,/,/,/,/,/)
于 2013-01-30T15:30:12.763 に答える