2

シーケンシャル メインフレーム ファイルを分割する必要があります。正確には、特定のキーワードから始めて、このファイルのコンテンツを別のファイルにコピーする必要があります。例:

line1
line2
line3
start line4
line5
line6

この場合、「開始」を検索し、REXX または SORT を使用して line4 から始まるすべてを別のファイルにコピーする必要があります。助言がありますか?

編集:REXXで私が考えたが満足できなかったこと

"EXECIO * DISKR INPUT (STEM INPUT. FINIS)" 
LINEINPUT = 1 
LINEOUTPUT = 1 
FOUND = 0 /*working like a boolean? 
DO WHILE LINEINPUT <= INPUT.0 
  IF INPUT.LINEINPUT = start line4 THEN DO 
  FOUND = 1 
  END 
  IF FOUND = 1 THEN DO 
    INPUT.LINEINPUT = OUTPUT.LINEOUTPUT 
    LINEOUTPUT = LINEOUTPUT + 1 
  END 
LINEINPUT = LINEINPUT + 1 
END

このようなものかもしれませんが、これは、これらすべてのファイルを 1 行ずつ調べる必要があることを意味します。多分JCLにもっと良い方法がありますか?多分Syncsortはこのようなことをすることができますか?

RECFM は固定されています。正確にはFBA。LRECL 170. トリガーは、この行の一部または行全体のいずれかです。これは、すべてのファイルで常に同じ行であり、最初の数文字でさえファイル全体で一意であるため、重要ではありません。「start」がファイル内で 1 回だけ出現することを意味します。

4

2 に答える 2

4

トリガーの固定位置開始の場合:

  OPTION COPY
  INREC IFTHEN=(WHEN=GROUP,
                 BEGIN=(1,5,CH,EQ,C'start'),
                 PUSH=(171:ID=1))
  OUTFIL OMIT=(171,1,CH,EQ,C' '),
         BUILD=(1,170)

可変位置の一意のトリガーの場合:

  OPTION COPY
  INREC IFTHEN=(WHEN=GROUP,
                 BEGIN=(1,170,SS,EQ,C'start'),
                 PUSH=(171:ID=1))
  OUTFIL OMIT=(171,1,CH,EQ,C' '),
         BUILD=(1,170)

WHEN=GROUPこれはPUSH、現在のレコード、またはグループ番号 ( ID) またはグループ内の番号 ( ) からのデータを、グループ内SEQのすべてのレコード (現在のレコードを含む) のその位置に配置します。この場合、「グループ」はファイルの残りの部分です。

SSサブストリング検索を可能にするフィールド タイプです。

次に、 (コントロール カードによってファイルが処理された後にOMIT=似ていますが)フラグからの実際の選択を行い (PUSH からの値を持たない自動的に拡張されたレコードは空白に設定されます)、追加の BUILD を削除します。バイト。OMIT COND=OUTFIL

SORT には定義用の「プログラム ストレージ」がないため、余分なバイトが必要です。余分なフィールドはレコード上にある必要があります (または、現在のレコードの期間中のみ、PARSE されたフィールド内にある必要があります)。

于 2015-01-05T10:34:15.343 に答える
0

十分な評判がないため、コメントせずに申し訳ありませんが、これを回答として書いています。これは後で削除します

これは、REXX または JCL の両方の方法で実現できます。何を改善すべきかを判断できるように、これまでに試したことを教えてください。

于 2015-01-05T09:07:36.073 に答える