AS400 - MOVEA не компилируется для перемещения десятичной структуры данных в десятичный массив - PullRequest
0 голосов
/ 26 мая 2020
D posDS     ds
D pos1               2 0
D pos2               2 0

D posArr             2 0   dim(2)

C                     MoveA   posDS     posARR

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

Ответы [ 3 ]

2 голосов
/ 27 мая 2020

Похоже, вы, возможно, пытаетесь получить доступ к нескольким «последовательным» полям, возможно, из таблицы, как к массиву.

вместо того, чтобы пытаться переместить данные, просто выполните следующие

dcl-ds posDs;
  pos1 zoned(2);
  pos2 zoned(2);
  posArr zoned(2) dim(2) pos(1);
end-ds;

формат исправления будет выглядеть как

 d posDs           ds
 d  pos1                          2  0
 d  pos2                          2  0
 d  posArr                        2  0 dim(2) overlay(posDs)
2 голосов
/ 27 мая 2020

Структура данных также считается символьным полем. Не существует такой вещи, как «десятичная структура данных».

Если вы хотите, чтобы ваш массив «posArr» был отделен от подполей в вашей структуре данных, вы должны определить массив в структуре данных как Чарльз показал, а затем определите свой другой массив вне структуры данных. Тогда вы могли бы просто назначить массивы, используя "EVAL", вместо того, чтобы пытаться использовать устаревший код операции MOVEA.

d posDs           ds                  inz
d  pos1                          2  0
d  pos2                          2  0
d  posArrDs                      2  0 dim(2) samepos(pos1)

d posArr          s              2  0 dim(2)

    pos1 = 1;
    pos2 = 2;
    posArr = posArrDs; // Instead of MOVEA
    return;
1 голос
/ 26 мая 2020

Я считаю, что вам нужно будет указать, какой элемент массива вы назначаете, например posArr(1) или posArr(2). Если вы пытаетесь назначить оба элемента, я думаю, что потребуется либо два оператора присваивания, либо al oop.

Даже если вы исправите это, вы все равно можете получить ошибку десятичных данных, потому что структуры данных в RPG не инициализируются нулем. Они инициализируются как пробелы, если вы не используете ключевое слово INZ в своем определении spe c. Это означает, что если вы назначите неинициализированное поле numeri c другому numeri c, во время выполнения оно будет искать sh для записи недопустимых десятичных данных. Это легко предотвратить в структурах данных с помощью INZ, и это не проблема для отдельных полей, потому что система инициализирует их нулем.

...