COBOL - Tabelle Verarbeitung



Arrays in COBOL als Tabellen bezeichnet. Ein Array ist eine lineare Datenstruktur und ist eine Sammlung von individuellen Daten Artikel des gleichen Typs. DatenArtikel von eine Tabelle sind intern sortiert.

Tabelle Erklärung

Tabelle ist deklariert in Daten division. Tritt Klausel wird verwendet, um eine Tabelle zu definieren. Tritt Klausel gibt die Wiederholung der Datenname Definition. Es kann verwendet nur mit Level-Nummern start-ab 02 bis 49. tut nicht verwendet werden tritt Klausel mit Redefine. Beschreibung von eindimensionalen und zweidimensionalen Tabelle ist wie folgt:

Eindimensionale Tabelle

In einer eindimensionalen Tabelle, auftritt Klausel wird nur einmal in der Erklärung verwendet. WS-Tabelle ist die Gruppe Artikel, das die Tabelle enthält. WS-B benennt die Tabellenelemente, dass tritt 10-mal auf.

Syntax

Es folgt die Syntax für eine eindimensionale Tabelle definieren:

01 WS-TABLE.
   05 WS-A PIC A(10) OCCURS 10 TIMES.

Beispiel

IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.

DATA DIVISION.
   WORKING-STORAGE SECTION.
   01 WS-TABLE.
      05 WS-A PIC A(10) VALUE 'TUTORIALS' OCCURS 5 TIMES.     

PROCEDURE DIVISION.
   DISPLAY "ONE-D TABLE : "WS-TABLE.
STOP RUN.

JCL oben COBOL-Programm zu ausführen:

//SAMPLE JOB(TESTJCL,XXXXXX),CLASS=A,MSGCLASS=C
//STEP1 EXEC PGM=HELLO

Wenn Sie kompilieren und führen Sie das obige Programm, es produziert das folgende Ergebnis:

ONE-D TABLE : TUTORIALS TUTORIALS TUTORIALS TUTORIALS TUTORIALS

Zweidimensionale Tabelle

Eine zweidimensionale Tabelle mit beiden Datenelemente variabler Länge erstellt. Zum Vergleich, gehen Sie durch die Syntax, und dann versuchen, die Tabelle analysieren. Das erste Array (WS-A) kann von 1 bis 10 mal auf, und der inneren Anordnung (WS-C) kann von 1 bis 5 mal vorkommen. Für jeden Eintrag der WS-A, wird es entsprechend 5 Einträge der WS-C.

Syntax

Es folgt die Syntax für eine zweidimensionale Tabelle zu definieren:

01 WS-TABLE.
   05 WS-A OCCURS 10 TIMES.
      10 WS-B PIC A(10).
      10 WS-C OCCURS 5 TIMES.
         15 WS-D PIC X(6).

Beispiel

IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.

DATA DIVISION.
   WORKING-STORAGE SECTION.
   01 WS-TABLE.
      05 WS-A OCCURS 2 TIMES.
         10 WS-B PIC A(10) VALUE ' TUTORIALS'.
         10 WS-C OCCURS 2 TIMES.
            15 WS-D PIC X(6) VALUE ' POINT'.

PROCEDURE DIVISION.
   DISPLAY "TWO-D TABLE : "WS-TABLE.

STOP RUN.

JCL oben COBOL-Programm zu ausführen:

//SAMPLE JOB(TESTJCL,XXXXXX),CLASS=A,MSGCLASS=C
//STEP1 EXEC PGM=HELLO

Wenn Sie kompilieren und führen Sie das obige Programm, es produziert das folgende Ergebnis:

TWO-D TABLE :  TUTORIALS POINT POINT TUTORIALS POINT POINT

Subskript

Table einzelnen Elemente können durch Verwendung subskript zugegriffen werden. Subscript Valus kann von 1 bis zur Anzahl der in der Tabelle erfolgt reichen. Tiefstellen kann eine beliebige positive Zahl sein. Dabei spielt es keine Erklärung in Datenteilung erforderlich. Sie wird automatisch mit occurs -Klausel erstellt.

Beispiel

IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.

DATA DIVISION.
   WORKING-STORAGE SECTION.
   01 WS-TABLE.
      05 WS-A OCCURS 3 TIMES.
         10 WS-B PIC A(2).
         10 WS-C OCCURS 2 TIMES.
            15 WS-D PIC X(3).

PROCEDURE DIVISION.
   MOVE '12ABCDEF34GHIJKL56MNOPQR' TO WS-TABLE.
   DISPLAY 'WS-TABLE  : ' WS-TABLE.
   DISPLAY 'WS-A(1)   : ' WS-A(1).
   DISPLAY 'WS-C(1,1) : ' WS-C(1,1).
   DISPLAY 'WS-C(1,2) : ' WS-C(1,2).
   DISPLAY 'WS-A(2)   : ' WS-A(2).
   DISPLAY 'WS-C(2,1) : ' WS-C(2,1).
   DISPLAY 'WS-C(2,2) : ' WS-C(2,2).
   DISPLAY 'WS-A(3)   : ' WS-A(3).
   DISPLAY 'WS-C(3,1) : ' WS-C(3,1).
   DISPLAY 'WS-C(3,2) : ' WS-C(3,2).
   
STOP RUN.

JCL oben COBOL-Programm zu ausführen:

//SAMPLE JOB(TESTJCL,XXXXXX),CLASS=A,MSGCLASS=C
//STEP1 EXEC PGM=HELLO

Wenn Sie kompilieren und führen Sie das obige Programm, es produziert das folgende Ergebnis:

WS-TABLE  : 12ABCDEF34GHIJKL56MNOPQR
WS-A(1)   : 12ABCDEF
WS-C(1,1) : ABC
WS-C(1,2) : DEF
WS-A(2)   : 34GHIJKL
WS-C(2,1) : GHI
WS-C(2,2) : JKL
WS-A(3)   : 56MNOPQR
WS-C(3,1) : MNO
WS-C(3,2) : PQR

Index

Tischelemente können auch durch verwendung Index zugegriffen werden. Ein Index ist eine Verschiebung des Elements vom Anfang der Tabelle. Ein Index wird erklärt mit Tritt Klausel Verwendung BY-Klausel indexiert. Der Wert des Index kann mit SET-Anweisung geändert werden und PERFORM Unterschiedliche Option.

Syntax

Es folgt die Syntax für die Definition Index in einer Tabelle:

01 WS-TABLE.
   05 WS-A PIC A(10) OCCURS 10 TIMES INDEXED BY I.

Beispiel

IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.

DATA DIVISION.
   WORKING-STORAGE SECTION.
   01 WS-TABLE.
      05 WS-A OCCURS 3 TIMES INDEXED BY I.
         10 WS-B PIC A(2).
         10 WS-C OCCURS 2 TIMES INDEXED BY J.
            15 WS-D PIC X(3).

PROCEDURE DIVISION.
   MOVE '12ABCDEF34GHIJKL56MNOPQR' TO WS-TABLE.
   PERFORM A-PARA VARYING I FROM 1 BY 1 UNTIL I >3 
   STOP RUN.
   
   A-PARA.
   PERFORM C-PARA VARYING J FROM 1 BY 1 UNTIL J>2.
   
   C-PARA.
   DISPLAY WS-C(I,J).

JCLoben COBOL-Programm zu ausführen:

//SAMPLE JOB(TESTJCL,XXXXXX),CLASS=A,MSGCLASS=C
//STEP1 EXEC PGM=HELLO

Wenn Sie kompilieren und führen Sie das obige Programm, es produziert das folgende Ergebnis:

ABC
DEF
GHI
JKL
MNO
PQR

Set Erklärung

Set erklärung wird verwendet, um den Indexwert zu ändern. Set Verb wird verwendet, um zu initialisieren, erhöhen bzw. verringern den Indexwert. Es ist mit Suche verwendet und Suchen Alle Elemente in der Tabelle zu finden.

Syntax

Im Anschluss ist die Syntax für eine Set-Anweisung:

SET I J TO positive-number
SET I TO J
SET I TO 5
SET I J UP BY 1
SET J DOWN BY 5

Beispiel

IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.

DATA DIVISION.
   WORKING-STORAGE SECTION.
   01 WS-TABLE.
      05 WS-A OCCURS 3 TIMES INDEXED BY I.
         10 WS-B PIC A(2).
         10 WS-C OCCURS 2 TIMES INDEXED BY J.
            15 WS-D PIC X(3).

PROCEDURE DIVISION.
   MOVE '12ABCDEF34GHIJKL56MNOPQR' TO WS-TABLE.
   SET I J TO 1.
   DISPLAY WS-C(I,J).
   SET I J UP BY 1.
   DISPLAY WS-C(I,J).
   
STOP RUN.

JCL oben COBOL-Programm zu ausführen

//SAMPLE JOB(TESTJCL,XXXXXX),CLASS=A,MSGCLASS=C
//STEP1 EXEC PGM=HELLO

Wenn Sie kompilieren und führen Sie das obige Programm, es produziert das folgende Ergebnis:

ABC
JKL

Suchen

Suche eine lineare Suchverfahren, das verwendet wird, um Elemente in der Tabelle zu finden. Es kann auf sortierten sowie unsortierten Tabelle durchgeführt werden. Es ist nur für Tabellen, die von Index Begriff erklärt verwendet. Es beginnt mit dem Anfangswert des Index. Wenn das gesuchte Element nicht gefunden wird, dann wird der Index wird automatisch um 1 erhöht und es bis zum Ende der Tabelle setzt.

Beispiel

IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.

DATA DIVISION.
   WORKING-STORAGE SECTION.
   01 WS-TABLE.
      05 WS-A PIC X(1) OCCURS 18 TIMES INDEXED BY I.
   01 WS-SRCH PIC A(1) VALUE 'M'.

PROCEDURE DIVISION.
   MOVE 'ABCDEFGHIJKLMNOPQR' TO WS-TABLE.
   SET I TO 1.
   SEARCH WS-A
     AT END DISPLAY 'M NOT FOUND IN TABLE'
     WHEN WS-A(I)=WS-SRCH
     DISPLAY 'LETTER M FOUND IN TABLE'
   END-SEARCH.  

STOP RUN.

JCL oben COBOL-Programm zu ausführen:

//SAMPLE JOB(TESTJCL,XXXXXX),CLASS=A,MSGCLASS=C
//STEP1 EXEC PGM=HELLO

Wenn Sie kompilieren und führen Sie das obige Programm, es produziert das folgende Ergebnis:

LETTER M FOUND IN TABLE

Suchen Alle

Suchen Alle ist eine binäre Suchverfahren, das verwendet wird, um Elemente in der Tabelle zu finden. Tabelle muss in sortierter Reihenfolge für Suche Alle Option sein. Der Index erfordert keine Initialisierung. In binären Suche in der Tabelle ist in zwei Hälften geteilt, und bestimmt, in dem die Hälfte des gesuchten Elements vorliegt. Dieser Vorgang wiederholt sich, bis das Element gefunden wurde oder das Ende erreicht ist.

Beispiel

IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.

DATA DIVISION.
   WORKING-STORAGE SECTION.
   01 WS-TABLE.
      05 WS-RECORD OCCURS 10 TIMES ASCENDING KEY IS WS-NUM INDEXED BY I.
      10 WS-NUM PIC 9(2).
      10 WS-NAME PIC A(3).

PROCEDURE DIVISION.
   MOVE '12ABC56DEF34GHI78JKL93MNO11PQR' TO WS-TABLE.
   SEARCH ALL WS-RECORD
     AT END DISPLAY 'RECORD NOT FOUND'
     WHEN WS-NUM(I)=93
     DISPLAY 'RECORD FOUND '
     DISPLAY WS-NUM(I)
     DISPLAY WS-NAME(I)

END-SEARCH. 

JCL oben COBOL-Programm zu ausführen:

//SAMPLE JOB(TESTJCL,XXXXXX),CLASS=A,MSGCLASS=C
//STEP1 EXEC PGM=HELLO

Wenn Sie kompilieren und führen Sie das obige Programm, es produziert das folgende Ergebnis:

RECORD FOUND 
93
MNO
Advertisements