Кто может сказать мне, что не так с этим массивом RPGLE?

У вас есть файл принтера, который выглядит примерно так:

Customer-data                 Units01 Units02 ....... Units11
-------------------------------------------------------------
Name/address/zip/....         Count01 Count02 ....... Count11
Name/address/zip/....         Count01 Count02 ....... Count11
:    :       :   :            :       :       :       : 
Name/address/zip/....         Count01 Count02 ....... Count11
                              ------- ------- ------- -------
Totals                        Total01 Total02 ....... Total11

Поля Units, Count и Total отображаются в структуры данных с наложением определения массива, например:

0014.00 D UNITSDS         DS
0015.00 D   UNITS01
0016.00 D   UNITS02
:       :   :
0024.00 D   UNITS10
0025.00 D   UNITS11
0026.00 D  UNITSAR                            LIKE(UNITS) DIM(11) 
0026.00 D                                     OVERLAY(UNITSDS)
:       D*-------------------------------------------------------
0034.00 D COUNTDS         DS
0035.00 D   COUNT01
0036.00 D   COUNT02
:       :   :
0044.00 D   COUNT10
0045.00 D   COUNT11
0046.00 D  COUNTAR                            LIKE(COUNT) DIM(11) 
0046.00 D                                     OVERLAY(COUNTDS)
:       D*-------------------------------------------------------
0054.00 D TOTALDS         DS
0055.00 D   TOTAL01
0056.00 D   TOTAL02
:       :   :
0064.00 D   TOTAL10
0065.00 D   TOTAL11
0066.00 D  TOTALAR                            LIKE(TOTAL) DIM(11) 
0066.00 D                                     OVERLAY(TOTALDS)

Когда после некоторой обработки я обрабатываю ЗАПИСЬ в строке сведений в файле принтера, я получаю "Ошибка десятичных данных".

Я был очень удивлен, что кажется, что массивы COUNTAR и TOTALAR имеют тип данных "Packed", хотя все ранее определенные переменные COUNT, COUNTnn, TOTAL и TOTALnn являются "Zoned", а структуры данных COUNTDS и TOTALDS - "Char".

Упакованные данные были сопоставлены в выходном буфере для файла принтера, что вызвало "Ошибка десятичных данных".

Почему эти массивы внезапно оказываются в "упакованном" формате данных?

2 ответа

Я бы код это

0014.00 D UNITSDS         DS
0015.00 D   UNITS01
0016.00 D   UNITS02
:       :   :
0024.00 D   UNITS10
0025.00 D   UNITS11
0026.00 D  UNITSAR                            LIKE(UNITS01) DIM(11) 
0026.00 D                                     OVERLAY(UNITSDS)
:       D*-------------------------------------------------------
0034.00 D COUNTDS         DS
0035.00 D   COUNT01
0036.00 D   COUNT02
:       :   :
0044.00 D   COUNT10
0045.00 D   COUNT11
0046.00 D  COUNTAR                            LIKE(COUNT01) DIM(11) 
0046.00 D                                     OVERLAY(COUNTDS)
:       D*-------------------------------------------------------
0054.00 D TOTALDS         DS
0055.00 D   TOTAL01
0056.00 D   TOTAL02
:       :   :
0064.00 D   TOTAL10
0065.00 D   TOTAL11
0066.00 D  TOTALAR                            LIKE(TOTAL01) DIM(11) 
0066.00 D                                     OVERLAY(TOTALDS)

Все структуры данных всегда символьные, поскольку в RPG нет типа данных BYTE.

Похоже, вы не определяете здесь подполя, поэтому они должны подбирать там размер и тип из другого места. Скорее всего, файл принтера. Возможно, файл принтера изменился?

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

Вместо этого это, вероятно, связано с тем, что DS не инициализирован.

Из руководства

Когда параметр INZ не указан:
- Статические автономные поля и подполя инициализированных структур данных инициализируются их начальными значениями RPG по умолчанию (например, пробелы для символа, 0 для числа).
- Подполя неинициализированных структур данных (INZ, не указанные в спецификации определения для структуры данных) инициализируются пробелами (независимо от их типа данных).

Так как у вас нет INZ ключевые слова в вашем DS, они считаются неинициализированными, и все подполя вашего DS установлены как пустые. Какие или конечно не действительные числа.

Если отчет обычно работает нормально и печатает данные во всех 11 столбцах. Вы можете увидеть ошибку сейчас, если вы пытаетесь запустить отчет таким образом, что загружаются не все 11 подполей; таким образом оставляя некоторые с пробелами. Когда система пытается переместить данные в выходной буфер файла принтера, вы получаете десятичную ошибку данных.

Короче говоря, добавьте INZ Ключевое слово для вашего DS.

D COUNTDS         DS                  INZ
Другие вопросы по тегам