2017-01-23 3 views
1

Когда я компилирую программу RPG, я получаю ошибку ниже:RPG ошибка компиляции

*RNF7408 30  1 The length of the input field does not match the definition of the field; specification is ignored. 

Поле упоминается как часть этой ошибки была EXITAX, которая имеет размер 15,2 в WR654F и 9,2 в DA595F. Я был в предположении, что это связано с двумя файлами (WR654F и DA595F), имеющих одно поле с тем же именем (EXITAX), но разных размеров, заявленной в спецификации F:

FWR654F IF E    DISK 
FDA595F O A E   K DISK 

Но когда я создал другую программу только две вышеупомянутые спецификации и *inlr = *on ради компиляции, он отлично работал и скомпилирован. Поэтому я не понимаю, почему исходная программа не компилируется?

ответ

3

Я смог воспроизвести ошибку и успешную компиляцию. Вы верны в своем утверждении, что ошибка связана с тем, что поле определяется по-разному в двух файлах. Но он не появляется при компиляции только с определениями файлов и возвратом или *INLR = *ON. Компилятор RPG, по-видимому, не пытается генерировать спецификации O для DA595F, если вы фактически не записываете файл. поэтому в вашем тесте вам нужно добавить операцию write к выходной записи. Затем вы увидите ошибку.

На всякий случай ваш следующий вопрос: «Как это исправить?» Одним из способов было бы читать и писать из структуры данных. Как это:

dcl-ds file1ds  LikeRec(file1r: *input) Inz; 
    dcl-ds file2ds  LikeRec(file2r: *output) Inz; 

    read file1 file1ds; 
    eval-corr file2ds = file1ds; 
    write file2r file2ds; 
+0

О, я вижу .. Я просто добавил запись, и ошибка пришла. Спасибо, что всегда очень полезны, Марк! –

+0

Просто объявление нормальной работы Datastructure (или это внешнее описание DS. Извинения за мое непонимание в Полностью бесплатной RPG)? У меня создалось впечатление, что будут работать только внешние DS или I Spec. –

+0

Вы действительно должны использовать бесплатную RPG формата. Свободный формат стал доступным в 1990-х годах и делает программы более удобными для чтения и кодирования. Нет необходимости в спецификациях I или O. Эти структуры данных основаны на формате записи файла, определенного в инструкции 'dcl-f'. Я ввел второй параметр, который требуется для структур данных, используемых в операциях ввода-вывода. – jmarkmurphy

1

Для предотвращения RPG от создания спецификации I и O, добавьте ключевое слово КВАЛИФИЦИРОВАННОГО к файлам. Это также приведет к тому, что форматы записей будут квалифицироваться по имени файла. Поэтому вместо того, чтобы писать DA595FMT, вы должны написать DA595F.DA595FMT.

-1

КВАЛИФИЦИРОВАННЫЙ подход лучше избегать структурных конфликтов и экономить ресурсы от ненужных объявлений структуры данных.

Смежные вопросы