COBOL - Interne Sortierung

Das Sortieren von Daten in einer Datei oder das Zusammenführen von zwei oder mehr Dateien ist in fast allen geschäftsorientierten Anwendungen eine häufige Notwendigkeit. Die Sortierung wird zum Anordnen von Datensätzen in aufsteigender oder absteigender Reihenfolge verwendet, damit eine sequentielle Verarbeitung durchgeführt werden kann. Es gibt zwei Techniken, die zum Sortieren von Dateien in COBOL verwendet werden:

  • External sortwird zum Sortieren von Dateien mithilfe des Dienstprogramms SORT in JCL verwendet. Wir haben dies im JCL-Kapitel besprochen. Ab sofort konzentrieren wir uns auf die interne Sortierung.

  • Internal sort wird verwendet, um Dateien innerhalb eines COBOL-Programms zu sortieren. SORT Verb wird verwendet, um eine Datei zu sortieren.

Verb sortieren

Beim Sortieren in COBOL werden drei Dateien verwendet -

  • Input file ist die Datei, die wir entweder in aufsteigender oder absteigender Reihenfolge sortieren müssen.

  • Work filewird verwendet, um Datensätze zu speichern, während der Sortiervorgang ausgeführt wird. Eingabedateidatensätze werden für den Sortiervorgang in die Arbeitsdatei übertragen. Diese Datei sollte im Abschnitt Datei unter SD-Eintrag definiert werden.

  • Output fileist die Datei, die wir nach dem Sortiervorgang erhalten. Es ist die endgültige Ausgabe des Sortierverbs.

Syntax

Es folgt die Syntax zum Sortieren einer Datei:

SORT work-file ON ASCENDING KEY rec-key1
   [ON DESCENDING KEY rec-key2]
USING input-file GIVING output-file.

SORT führt die folgenden Operationen aus:

  • Öffnet die Arbeitsdatei im E / A-Modus, die Eingabedatei im INPUT-Modus und die Ausgabedatei im OUTPUT-Modus.

  • Überträgt die in der Eingabedatei vorhandenen Datensätze in die Arbeitsdatei.

  • Sortiert die SORT-DATEI in aufsteigender / absteigender Reihenfolge per Rec-Key.

  • Überträgt die sortierten Datensätze aus der Arbeitsdatei in die Ausgabedatei.

  • Schließt die Eingabedatei und die Ausgabedatei und löscht die Arbeitsdatei.

Example

Im folgenden Beispiel ist INPUT die Eingabedatei, die in aufsteigender Reihenfolge sortiert werden muss.

IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.

ENVIRONMENT DIVISION.
   INPUT-OUTPUT SECTION.
   FILE-CONTROL.
      SELECT INPUT ASSIGN TO IN.
      SELECT OUTPUT ASSIGN TO OUT.
      SELECT WORK ASSIGN TO WRK.

DATA DIVISION.
   FILE SECTION.
   FD INPUT.
      01 INPUT-STUDENT.
         05 STUDENT-ID-I PIC 9(5).
         05 STUDENT-NAME-I PIC A(25).
   FD OUTPUT.
      01 OUTPUT-STUDENT.
         05 STUDENT-ID-O PIC 9(5).
         05 STUDENT-NAME-O PIC A(25).
   SD WORK.
      01 WORK-STUDENT.
         05 STUDENT-ID-W PIC 9(5).
         05 STUDENT-NAME-W PIC A(25).

PROCEDURE DIVISION.
   SORT WORK ON ASCENDING KEY STUDENT-ID-O
   USING INPUT GIVING OUTPUT.
   DISPLAY 'Sort Successful'.
STOP RUN.

JCL um das obige COBOL-Programm auszuführen -

//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO
//IN DD DSN = INPUT-FILE-NAME,DISP = SHR
//OUT DD DSN = OUTPUT-FILE-NAME,DISP = SHR
//WRK DD DSN = &&TEMP

Wenn Sie das obige Programm kompilieren und ausführen, wird das folgende Ergebnis erzielt:

Sort Successful

Verb zusammenführen

Zwei oder mehr identisch sequenzierte Dateien werden mithilfe der Merge-Anweisung kombiniert. Im Zusammenführungsprozess verwendete Dateien -

  • Eingabedateien - Eingabe-1, Eingabe-2
  • Arbeitsdatei
  • Ausgabedatei

Syntax

Im Folgenden finden Sie die Syntax zum Zusammenführen von zwei oder mehr Dateien:

MERGE work-file ON ASCENDING KEY rec-key1
   [ON DESCENDING KEY rec-key2]

USING input-1, input-2 GIVING output-file.

Merge führt die folgenden Vorgänge aus:

  • Öffnet die Arbeitsdatei im IO-Modus, die Eingabedateien im INPUT-Modus und die Ausgabedatei im OUTPUT-Modus.

  • Überträgt die in den Eingabedateien vorhandenen Datensätze in die Arbeitsdatei.

  • Sortiert die SORT-DATEI in aufsteigender / absteigender Reihenfolge per Rec-Key.

  • Überträgt die sortierten Datensätze aus der Arbeitsdatei in die Ausgabedatei.

  • Schließt die Eingabedatei und die Ausgabedatei und löscht die Arbeitsdatei.

Example

Im folgenden Beispiel sind INPUT1 und INPUT2 die Eingabedateien, die in aufsteigender Reihenfolge zusammengeführt werden sollen.

IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.

ENVIRONMENT DIVISION.
   INPUT-OUTPUT SECTION.
   FILE-CONTROL.
      SELECT INPUT1 ASSIGN TO IN1.
      SELECT INPUT2 ASSIGN TO IN2.
      SELECT OUTPUT ASSIGN TO OUT.
      SELECT WORK ASSIGN TO WRK.

DATA DIVISION.
   FILE SECTION.
   FD INPUT1.
      01 INPUT1-STUDENT.
         05 STUDENT-ID-I1 PIC 9(5).
         05 STUDENT-NAME-I1 PIC A(25).
   FD INPUT2.
      01 INPUT2-STUDENT.
         05 STUDENT-ID-I2 PIC 9(5).
         05 STUDENT-NAME-I2 PIC A(25).
   FD OUTPUT.
      01 OUTPUT-STUDENT.
         05 STUDENT-ID-O PIC 9(5).
         05 STUDENT-NAME-O PIC A(25).
   SD WORK.
      01 WORK-STUDENT.
         05 STUDENT-ID-W PIC 9(5).
         05 STUDENT-NAME-W PIC A(25).

PROCEDURE DIVISION.
   MERGE WORK ON ASCENDING KEY STUDENT-ID-O
   USING INPUT1, INPUT2 GIVING OUTPUT.
   DISPLAY 'Merge Successful'.
STOP RUN.

JCL um das obige COBOL-Programm auszuführen -

//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
//STEP1 EXEC PGM = HELLO
//IN1 DD DSN=INPUT1-FILE-NAME,DISP=SHR
//IN2 DD DSN=INPUT2-FILE-NAME,DISP=SHR
//OUT DD DSN = OUTPUT-FILE-NAME,DISP=SHR
//WRK DD DSN = &&TEMP

Wenn Sie das obige Programm kompilieren und ausführen, wird das folgende Ergebnis erzielt:

Merge Successful