COBOL - Обработка таблицы


Advertisements

Массивов в COBOL, известны как таблицы. Массив представляет собой линейную структуру данных и является сбор данных о отдельные элементы данных такого же типа. Элементы данных в таблице, внутренне отсортировать.

Таблица Декларации

Таблица определяется как в данных Отдела. Возникает положение используется для определения в таблице. Возникает положение указывает, что повторения имя данных определение. Он может быть использован только на уровне номера начиная с 02 до 49. Не используйте происходит оговорку, с пересмотром. Описание одномерных и двумерных таблица является следующим:

Стеклова РАН таблица

В одномерной таблице, происходит оговорка используется только один раз в декларации. WS-таблице группы пункт, содержащий таблицы. WS-B имена в таблице элементов, 10 раз.

Синтаксис

Ниже синтаксис для определения одномерной таблице:

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

Пример

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 для выполнения выше COBOL программы:

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

При компиляции и выполнения этой программы, она производит следующие результаты:

ONE-D TABLE : TUTORIALS TUTORIALS TUTORIALS TUTORIALS TUTORIALS

ДВУМЕРНОГО таблица

В двумерных таблица создается как с элементами данных, переменной длины. Для справки, перейти через синтаксис и затем повторите попытку анализа таблицы. Первый array(WS-A) может произойти от 1 до 10 раз, а внутренний array(WS-C) может произойти от 1 до 5 раз. Для каждой записи WS-A, не будет соответствующей 5 записей WS-C.

Синтаксис

Ниже синтаксис для определения двумерной таблице:

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).

Пример

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 для выполнения выше COBOL программы:

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

При компиляции и выполнения этой программы, она производит следующие результаты:

TWO-D TABLE :  TUTORIALS POINT POINT TUTORIALS POINT POINT

Subscript

Таблица отдельных элементов можно получить с помощью subscript. Subscript valus может быть в диапазоне от 1 до числа раз в таблице. Subscript может быть любое положительное число. Он не требует каких-либо декларации в данных отдела. Она автоматически создается происходит оговорку.

Пример

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 для выполнения выше COBOL программы.

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

При компиляции и выполнения этой программы, она производит следующие результаты:

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

Индекс

Таблица элементов можно также получить с помощью индекса. Индекс - это перемещение элемента с начала таблицы. Индекса определяется с оговорку о возникновении используя индексированные by. Значение индекса может быть изменен с помощью оператора Set и выполнить различные опции.

Синтаксис

Ниже синтаксис для определения индекса, в таблицу:

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

Пример

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).

JCL для выполнения выше COBOL программы.

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

При компиляции и выполнения этой программы, она производит следующие результаты:

ABC
DEF
GHI
JKL
MNO
PQR

Установить заявление

Установка используется для изменения значения индекса. Установить глагол используется для инициализации, увеличение или уменьшение значения индекса. Он используется с поиск и поиск все для поиска элементов в таблице.

Синтаксис

Ниже синтаксис с помощью набора заявление:

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

Пример

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 для выполнения выше COBOL программы.

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

При компиляции и выполнения этой программы, она производит следующие результаты:

ABC
JKL

Поиск

Поиск - это линейный метод поиска, который используется для поиска элементов в таблице. Она может быть выполнена на сортировать по, а также несортированные таблицы. Она используется только для таблиц, индекс фразы. Он начинается с первоначальное значение индекса. Если найденный элемент не найден, то индекс автоматически увеличивается на 1 и она продолжается до конца таблицы.

Пример

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 для выполнения выше COBOL программы.

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

При компиляции и выполнения этой программы, она производит следующие результаты:

LETTER M FOUND IN TABLE

Поиск всех

Поиск все является двоичный поиск метод, который используется для поиска элементов в таблице. Таблица должна быть в отсортированном порядке для поиска всех вариант. Индекс не требуют инициализации. В двоичный поиск в таблице делится на две половины и определяет, когда половина искомый элемент. Этот процесс повторяется до элемент не найден или конец.

Пример

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 для выполнения выше COBOL программы:

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

При компиляции и выполнения этой программы, она производит следующие результаты:

RECORD FOUND 
93
MNO
Advertisements