2013-11-17 3 views
1

Это мой код, в котором iIam объявляет переменную с помощью OCCURS.Ошибка при использовании OCCURS в очень простой программе COBOL

IDENTIFICATION DIVISION. 
    PROGRAM-ID. ARRAYEX. 

    ENVIRONMENT DIVISION. 
    INPUT-OUTPUT SECTION. 
    FILE-CONTROL. 
     SELECT StudentFile ASSIGN TO "STUDENTS.DAT" 
      ORGANIZATION IS LINE SEQUENTIAL. 

    DATA DIVISION. 
    WORKING-STORAGE SECTION. 
    77 WS-FIRSTARR OCCURS 10 TIMES PIC 9(5). 

    PROCEDURE DIVISION. 

    DISPLAY "HELLO WORLD". 
    STOP RUN. 

Ошибка:

arrayex.cbl: 12: Ошибка: Уровень 77 пункт 'WS-FIRSTARR' не может быть ПРОИСХОДИТ пункт

каким-либо причинам компиляция терпит неудачу?

ответ

5

A 77 не может иметь ПРОСМОТРЕТЬ. У 01 не может быть OCCURS. Уровни 02-49 могут иметь OCCURS.

Забудьте уровень 66 (используется для предложения RENAMES), так как вы не должны его использовать и вряд ли когда-либо увидите его.

88-уровневое имя условия не может иметь значения, но если поле, в котором оно определено, является частью OCCURS или подчинено OCCURS, 88 будет нуждаться в подписи, как любые 02- 49- уровень, который также является частью или подчиненным OCCURS.

01 a-simple-array-structure. 
    05 the-data occurs 5 times   pic 9(5). 

Или вы можете усложнить ситуацию.

01 b-structure. 
    95 the-key       pic x(8). 
    05 some-data       pic x(10). 
    05 some-more-data     pic 9(7). 
    05 a-simple-array. 
     10 a-simple-array-item occurs 5 times  
              pic 9(5). 
    05 a-more-complex-array. 
     10 complex-entry occurs 10 times. 
      15 some-complex-data   pic xx. 
      15 another-bit-of-complex-data 
              pic 9(5). 

OCCURS также может использоваться для определения многомерных таблиц.

05 first-occurs occurs 5 times. 
     10 second-occurs occurs 5 times. 
      15 an-item     pic xx. 

Это еще далеко от полной гаммы ПРОИСХОДИТ, так что начать простую, практику, получить работу, становится все более сложными.

Существует также ОБЗОР В ЗАВИСИМОСТИ, таблица с переменной длиной. Одна вещь за раз. Получите простую работу OCCURS, а не только определение, но также и использование поля с индексом, индекса для индекса и литерала для индекса.

Тогда получите больше сложностей.

3

COBOL имеет несколько «магических» чисел уровня ...

  • Level-66 пунктов указывают на положение переименовывает следует ожидать
  • Level-77 элементы являются неделимыми, не могут быть разделены, не может иметь OCCURS.
  • Level-88 указывает на запись имя-условие

Смотрите страницы 5-4 и 5-5 programmer's guide.