COBOL - Ordinamento interno

L'ordinamento dei dati in un file o l'unione di due o più file è una necessità comune in quasi tutte le applicazioni aziendali. L'ordinamento viene utilizzato per disporre i record in ordine crescente o decrescente, in modo che sia possibile eseguire l'elaborazione sequenziale. Esistono due tecniche utilizzate per ordinare i file in COBOL:

  • External sortviene utilizzato per ordinare i file utilizzando l'utilità SORT in JCL. Ne abbiamo discusso nel capitolo JCL. A partire da ora, ci concentreremo sull'ordinamento interno.

  • Internal sort viene utilizzato per ordinare i file all'interno di un programma COBOL. SORT verbo viene utilizzato per ordinare un file.

Ordina verbo

Tre file vengono utilizzati nel processo di ordinamento in COBOL:

  • Input file è il file che dobbiamo ordinare in ordine crescente o decrescente.

  • Work fileviene utilizzato per conservare i record durante il processo di ordinamento. I record del file di input vengono trasferiti al file di lavoro per il processo di ordinamento. Questo file dovrebbe essere definito nella sezione File sotto la voce SD.

  • Output fileè il file che otteniamo dopo il processo di ordinamento. È l'output finale del verbo Sort.

Sintassi

Di seguito è riportata la sintassi per ordinare un file:

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

SORT esegue le seguenti operazioni:

  • Apre il file di lavoro in modalità IO, il file di input in modalità INPUT e il file di output in modalità OUTPUT.

  • Trasferisce i record presenti nel file di input nel file di lavoro.

  • Ordina il SORT-FILE in sequenza ascendente / discendente tramite il tasto rec.

  • Trasferisce i record ordinati dal file di lavoro al file di output.

  • Chiude il file di input e il file di output ed elimina il file di lavoro.

Example

Nel seguente esempio, INPUT è il file di input che deve essere ordinato in ordine crescente -

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 per eseguire il programma COBOL di cui sopra -

//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

Quando compili ed esegui il programma sopra, produce il seguente risultato:

Sort Successful

Unisci verbo

Due o più file in sequenza identica vengono combinati utilizzando l'istruzione Merge. File utilizzati nel processo di unione -

  • File di input - Input-1, Input-2
  • File di lavoro
  • File di uscita

Sintassi

Di seguito è riportata la sintassi per unire due o più file:

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

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

Unisci esegue le seguenti operazioni:

  • Apre il file di lavoro in modalità IO, i file di input in modalità INPUT e il file di output in modalità OUTPUT.

  • Trasferisce i record presenti nei file di input nel file di lavoro.

  • Ordina il SORT-FILE in sequenza ascendente / discendente tramite il tasto rec.

  • Trasferisce i record ordinati dal file di lavoro al file di output.

  • Chiude il file di input e il file di output ed elimina il file di lavoro.

Example

Nell'esempio seguente, INPUT1 e INPUT2 sono i file di input che devono essere uniti in ordine crescente -

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 per eseguire il programma COBOL di cui sopra -

//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

Quando compili ed esegui il programma sopra, produce il seguente risultato:

Merge Successful