2016-04-27 9 views
0

Ich habe eine 6-zeilige Eingabedatei, die aus einem Feld (Position 1 bis 6) besteht, das auf jeder Zeile einen anderen Wert enthält. Basierend auf den verschiedenen Werten in diesem Feld werden die anderen Felder (Von Position 7 -80) in eine einzelne Zeile in der Ausgabe verschoben.JCL SORT - Felder aus verschiedenen Zeilen der Eingabe müssen zu einer einzelnen Ausgabezeile hinzugefügt werden.

E.G.

Eingang:

035MI 88122    
035ST 72261    
035SU 317786762   
105   06616858  
1601  11    
1651 0000000140006PC 

Ausgang:

1  8812272261317786762  06616858 11 0000000140006PC 

Ich brauche, um herauszufinden, wie diese alle in so unterschiedlichen Zeilen zu lesen und anschließend auf eine einzige Zeile. Ich habe versucht, etwas Ähnliches wie den Code dies mit:

SORT FIELDS=COPY       
INREC IFTHEN=(WHEN=(1,6,CH,EQ,C'035MI '), 
       OVERLAY=(3:7,5)),  

Aber das wird die Daten auf die richtige Position auf separaten Zeilen wie diese bewegen:

1  8812272261317786762        
1        06616858 
1           11 
1            0000000140006PC 

So, jetzt ich glaube, ich muss Führen Sie eine Sortierung in einem Schritt und eine Zusammenführung in einem anderen Schritt durch. Ich würde es lieber in einem machen, wenn es aber möglich ist. Ich würde mich über jede Hilfe hier freuen. Vielen Dank.

+0

Wie hat Sie schaffen es, die ersten drei Zeilen in Ihren Beispiel-Ausgabedaten zu konsolidieren? Wenn Sie das tun können, sollten Sie b Ich bin in der Lage, das Ganze zu erreichen. Die Kontrollkarten, die du gezeigt hast, werden das nicht tun. –

+0

Sorry Bill, ich hätte klarer sein sollen. Die Ausgabe wird derzeit von einem Cobol-Programm produziert. Ich versuche, diese Ausgabe mit einer JCL-Sortierung zu replizieren. Aber wenn ich SORT führe, ist jedes Feld in einer Reihe. Ich brauche sie in der gleichen Zeile wie bei der Beispielausgabe. –

+0

Welches Sortierprodukt haben Sie? Es kann * unterschiedliche Lösungen für DFSORT geben als beispielsweise Syncsort. – cschneid

Antwort

1

Sie fügen jedem Datensatz eine Sequenznummer hinzu.

Die Verwendung von WHEN = GROUP zum Kopieren von Daten von einem Datensatz in einen oder mehrere nachfolgende Datensätze.

Sie verwenden OUTFIL INLUDE =, um nur den endgültigen Datensatz abzurufen.

OPTION COPY 

INREC IFTHEN=(WHEN=INIT, 
       OVERLAY=(81:SEQNUM,1,ZD)), 

     IFTHEN=(WHEN=GROUP, 
       BEGIN=(81,1,CH,EQ,C'1'), 
       PUSH=(somestuff), 
       RECORDS=6), 

     IFTHEN=(WHEN=GROUP, 
       BEGIN=(81,1,CH,EQ,C'2'), 
       PUSH=(somestuff), 
       RECORDS=5), 

     IFTHEN=(WHEN=GROUP, 
       BEGIN=(81,1,CH,EQ,C'3'), 
       PUSH=(somestuff), 
       RECORDS=4), 

     IFTHEN=(WHEN=GROUP, 
       BEGIN=(81,1,CH,EQ,C'4'), 
       PUSH=(somestuff), 
       RECORDS=3), 

     IFTHEN=(WHEN=GROUP, 
       BEGIN=(81,1,CH,EQ,C'5'), 
       PUSH=(somestuff), 
       RECORDS=2), 


    OUTFIL INCLUDE=(81,1,CH,EQ,C'6'), 
      BUILD=(1,80) 

Sie benötigen ein wenig Planung zu tun. Der sechste Datensatz enthält alle Daten, aber vielleicht noch nicht in der von Ihnen gewünschten Reihenfolge. Entweder mit einem IFTHEN = (WHEN = (logischer Ausdruck) (um den sechsten Datensatz zu identifizieren) auf der INREC oder mit dem BUILD auf der OUTREC, können Sie Ihre endgültige Formatierung machen.

Sie müssen die something jedes Mal ändern, es wird receivingposition:sourceposition,length

die DFSORT Handbücher sind sehr gut, da sein ein ist Getting Started für neue diejenigen auf das Produkt, und alles, was Sie ist im Application Programming Guide benötigen,

+0

Danke für die ausführliche Antwort Bill. Ich werde das testen und die Ergebnisse veröffentlichen. –

+0

Dieser Code funktioniert nicht Bill, da ich diese Bedingung immer noch benötige. (WENN = (1,6, CH, EQ, C'035MI '). Wenn ich' WHEN = GROUP 'hinzufüge, kann ich die erste Bedingung nicht beibehalten. –

+0

@JackDonovan Warum brauchen Sie diese Bedingung? –

Verwandte Themen