0

以下のようなデータがあります。

これは実際のデータではありませんが、実際のデータはこれに似ています。また、データは各フィールド間に 2 つのスペースがあるファイルに含まれます。入力または出力にデータベースは関与しません。わかりやすくするために表形式を使用しています。

 Name    Number   code
+---------------------+
 Albert  122234   xcc
 Robert  565435   rtd
 Robert  776567   iuy
 Robert  452890   yyt
 Stuart  776565   ter

ファイルでは、データは次のようになります。

Albert  122234  xcc
Robert  565435  rtd
Robert  776567  iuy
Robert  452890  yyt
Stuart  776565  ter

ここで、SYNCSORT を使用して重複を排除する必要があります。XSUM を使用してこれを行うことができますが、次のデータが得られます。

 Name    Number   code
+---------------------+
 Albert  122234   xcc
 Robert  565435   rtd
 Stuart  776565   ter

しかし、私は必要です:

 Name     Number   code
+----------------------+
 Albert   122234   xcc
 Robert   452890   yyt
 Stuart   776565   ter

データの最後のセットにはRobert、出力での最後の出現があり、前のセットには最初の出現があります。

では、XSUM を使用してこれを達成する方法はありますか?

4

3 に答える 3

1

これを行うには複数の方法があります。

最初に、SyncTool を使用します (途中のどこかに EXEC PGM=ICETOOL があるように、おそらく ICETOOL に「エイリアス」されます)。LAST を持つ SELECT 演算子を見てください。これにより、必要なものが得られるはずです。ファイルが既にソートされている場合は、再度ソートしないでください (USING ファイルの OPTION COPY)。

例は、次の資料の「削除された重複レコードを保持する (XSUM)」の下にあります

最終的には、次のようなコントロール カードが作成されます。

  SELECT FROM(IN) TO(OUT) ON(1,3,CH) FIRST DISCARD(SORTXSUM)

ここにも簡単な例があります: http://www.ibmmainframes.com/viewtopic.php?p=310008#310008

データがすでにソートされている場合、またはソートされた後である場合は、OUTFIL および「レポート機能」を使用してください。REMOVECC と NODETAIL を見て、SECTIONS と TRAILER3 を使用します。http://www.ibmmainframes.com/viewtopic.php?p=309955#309955は一例です。

最終的には、次のようなコントロール カードになります。

  OPTION EQUALS                                         
  SORT FIELDS=(1,3,CH,A)                                 
  OUTFIL REMOVECC,NODETAIL,SECTIONS=(1,3,TRAILER3=(1,80))

データをソートしていて、XSUM を使用して破棄された重複を別のデータセットに保持する場合は、レコードの一時的な拡張にシーケンス番号を含め、メイン キーの後に降順で並べ替えることができます。一時的な拡張機能を削除します。これは 1 つのステップで行うことはできませんが、SELECT (確かに DFSORT バージョン) は、XSUM が行うすべてのこと、およびそれ以上のことを 1 つの関数で行うことができます。

最後に、私の心の奥底で何かしつこいことがあった後、少なくとも 1.4 の現在の SyncSort を持っている場合、LASTDUPとSUM および XSUM の代わりに XDUP。

最終的には、次のようなコントロール カードが作成されます。

  DUPKEYS LASTDUP,NODUPS,XDUP
于 2013-08-24T12:19:10.963 に答える
1

同じソートキーを持つ一連のレコードの LAST レコードを保持したいようです。

SyncSort の最近のリリースがある場合は、LASTDUP で DUPKEYS を使用し、他の回答で述べたように EQUALS を使用します。

SyncSort を使用してからしばらく経ちましたが、私の記憶が正しければ、ソートキーにアクセスしてレコードを受け入れたり拒否したりできる出口ルーチンをコーディングすることが可能です。出口ルーチンはレコードごとに入力されるため、比較のために以前のソートキーを保持することができます。

また、私はアセンブラー (BAL) で出口を書くのが好きですが、これは COBOL コードで行うことができます。

したがって、SyncSort が必要なコマンドをサポートしている場合は、ぜひそれを使用してください。そうでない場合、出口は比較的簡単にコーディングできます...

于 2013-08-27T07:55:57.350 に答える