OpenCOBOL Complex ODO (в зависимости от обстоятельств) - PullRequest
0 голосов
/ 24 февраля 2011

Я новичок в COBOL (и OpenCOBOL), и мой вопрос о "complex-odo" (происходит в зависимости от) в OpenCOBOL.

Я использовал 1.0 для следующего кода

......

01  W-PTDO-PROC-TBL.
       05  W-PTDO-PROC-ENTRY OCCURS 0 TO 450 TIMES
             DEPENDING ON W-PTDO-PROC-MAX
             INDEXED BY W-PTDO-PROC-INDX.
           10 W-PTDO-PROC-APC        PIC X(05).
           10 W-PTDO-PROC-LNSUB      PIC S9(07)   COMP-3.
           10 W-PTDO-PROC-KEY.
               15 W-PTDO-PROC-WA-OFFSET  PIC 9(08)V99.
               15 W-PTDO-PROC-UNITS      PIC 9(09).
           10 W-PTDO-PROC-DEVICE-CNT PIC 9(03).
           10 W-PTDO-PROC-DARRAY OCCURS 0 TO 450 TIMES
                DEPENDING ON W-PTDO-DARRAY-MAX
                INDEXED BY W-PTDO-DARRAY-INDX.
               15  W-PTDO-PROC-DHCPCS PIC X(05).
           10 W-PTDO-DARRAY-SIZE     PIC 9(03).
           10 W-PTDO-PROC-TOT-DCHRGS PIC 9(10)V99.
           10 W-PTDO-PROC-TOT-DUNITS PIC 9(05).
           10 W-PTDO-PROC-USED       PIC X(01).

......

и cobc возвращает с этой ошибкой msg:

Ошибка: «W-PTDO-PROC-ENTRY» не может иметь предложение OCCURS из-за «W-PTDO-PROC-DARRAY»

И выше сообщение об ошибке выдается из field.c, где я нашел этот комментарий / * элемент данных, который содержит предложение OCCURS DEPENDING, не должен подчиняться элементу данных, который содержит предложение OCCURS * /

Есть ли способ заставить OpenCOBOL поддерживать этот "complex-odo"?

Мой фрагмент кода, приведенный выше, с "OCCURS DEPENDING", вложенным в предложение "OCCURS" более высокого уровня, кажется хорошо определенным "complex-odo" в соответствии с приложением IBM COBOL Programming Guide.

Спасибо,

Билли Ронг

1 Ответ

2 голосов
/ 14 марта 2011

Вы не можете иметь массив переменной длины (OCCURS DEPENDING ON) внутри другого массива!

Требуемая обработка слишком сложна. Если длина элемента внутреннего массива могла изменяться, то единственный возможный способ вычислить начало N-й записи внешнего массива - это последовательно обращаться к каждому внутреннему элементу от 1 до N и использовать счетчик DEPENDING ON для расчета его длина, и, следовательно, начало следующей записи массива.

...