2016-06-30 2 views
0

さまざまなフィールドをソート/再フォーマットし、以下のコードのように新しい出力ファイルに出力するJCLソートを作成しました。 10分の1秒ごとのレコードの先頭に数字「9」を単に印字するには、このコードを修正する必要があります。私は 'IFTHEN'が必要だと推測しますが、 'OUTREC FIELDS'で使用できるかどうかはわかりません。JCLソートを使用してx個のレコードの後に​​文字を書き込む

SORT FIELDS=COPY 
    OUTREC FIELDS=(2:26,5, 
       7:38,8, 
       22:15,9, 
       46:C'AAA') 
+0

「10分の1」のレコードでは何をしていますか?別の人は異なるものを意味しますか? –

+0

最初の位置に空白で始まる9個のレコードがあります。ポジション。それ以降のレコードは最初の位置に9を持ちます。次の9つのレコードは最初の位置にスペースがあり、1つ後に1つ目の位置に '9'が付きます。 –

答えて

0

まず、OUTREC FIELDS =を使用しないでください。またはINREC FIELDS =。またはOUTFIL OUTREC =。

FIELDS =は「過負荷」です。同じ言葉は、異なる場所で異なることを意味します。

BUILDはFIELDS = INRECとOUTREC、OUTRECのOUTRECでは現代版です。

INREC BUILD =、OUTREC BUILD =、OUTFIL BUILD =を使用します。

BUILDは、これらのコンテキストでのFIELDS/OUTRECの「エイリアス」なので、処理との違いはなく、コンピュータとの違いはなく、人間の違いだけです。

SORT FIELDS=COPY 
INREC BUILD=(02: 
       26,5, 
       38,8, 
      22: 
       15,9, 
      46: 
       C'AAA') 

人が読めるかたちでの提案。 SORTは気にしないので、人間のためにあなたのコードを書いてください。私は冗長な7:を削除したことに注意してください。列7は次に利用可能な位置であるため、指定するだけで物事を混乱させるだけです。

SORT記号を使用することも検討してください。

SORT FIELDS=COPY 
    INREC IFTHEN=(WHEN=INIT, 
       BUILD=(SEQNUM, 
         1, 
         ZD, 
         START=0, 
         26,5, 
         38,8, 
         22: 
         15,9, 
         46: 
         C'AAA')), 
      IFTHEN=(WHEN=(1,1,CH,NE,C'9'), 
        OVERLAY=(1:X)) 

あなたが望むのは、シーケンス番号を使用することです。上記のコードは、Zoned Decimalとして各出力レコードに1バイトのシーケンス番号を含んでいます。 「文字」番号。シーケンス番号のデフォルトの開始は1ですが、あなたの場合はSTART =で簡単な0から開始します。 11番目のシーケンス番号以降は切り捨てられても問題ありません(下位値はそのままです)。

ほぼ。レコードをフォーマットした後、シーケンス番号をテストします。 "9"でなければ、OVERLAYを使ってその最初のバイトだけを空白(コードのX)に変更します。

= INITは無条件に、レコードごとに行われ、必要に応じて、あなたがそれらの多くを持つことができますザが順番に処理されIFTHEN =(。

IFTHEN =(=(logicalexpressionがどのWHENの後に来なければなりません= INITであり、case/select-style文(またはCOBOL EVALUATE)のように動作しますIFTHEN =(WHEN =(論理区切りがtrueの場合、HFT = NEXTが指定されていない限り、IFTHENの処理は中止されます)

+0

ありがとうございました。それは私が探していた答えです。 –

関連する問題