Во-первых, я вижу, что после вашего последнего вопроса вы перешли к контрактной таблице с OCCURS. Я думаю, что это неправильно. Это лучше.
01 FILE-TABLE.
05 FILE-TABLE-ROW
OCCURS 10 TIMES
INDEXED BY I.
10 FILE-TABLE-COL
OCCURS 10 TIMES
INDEXED BY J.
15 FILE-TABLE-COL PIC X(1).
Только один момент, о котором я не упоминал ранее, поскольку вы можете давать имена, чтобы помочь себе как новичку, вам не нужно давать имена полям, если вы не собираетесь их использовать.
01 FILE-TABLE.
05 FILE-TABLE-ROW
OCCURS 10 TIMES
INDEXED BY I.
10 FILLER
OCCURS 10 TIMES
INDEXED BY J.
15 FILE-TABLE-COL PIC X(1).
Обратите внимание, что, начиная со Стандарта 1985 года, слово НАПОЛНИТЕЛЬ можно писать невидимыми чернилами:
05 FILLER PIC X(20).
05 PIC X(20).
Пробел в имени — это неявный FILLER. Обратите также внимание, что 05
можно записать как 5
, как и любой номер уровня, начинающийся с нуля.
ПРОЧИТАЙТЕ ФАЙЛ, ЗАПИСЫВАЙТЕ ЗАПИСЬ, как гласит старая поговорка. «Запись» в этом контексте — это уровень 01 ниже DF. Вы пытаетесь написать что-то, что является второстепенной частью записи, что не сработает. Кажется, перепутал компилятор.
Я не вижу FD, но предполагаю, что он есть. Поместите свою таблицу в WORKING-STORAGE (или LOCAL-STORAGE). Определите 10-байтовую запись под вашим FD, MOVE FILE-TABLE-ROW в эту вновь определенную запись или используйте WRITE FROM FILE-TABLE-ROW.
Вы не можете записать часть записи (уровень 01) в РАЗДЕЛ ФАЙЛА. Вы можете использовать MOVE или WRITE... FROM... для доступа к данным на уровне, отличном от 01, и получить эти данные на уровне 01, чтобы разрешить запись.
WORKING-STORAGE SECTION,
01 some-thing PIC X.
потом
MOVE some-thing TO output-record
WRITE output-record
Or
WRITE output-record FROM some-thing
Есть два разных способа написать WRITE
, которые вас здесь интересуют:
WRITE record-name
WRITE record-name FROM somewhere-else
Во-первых, вы полностью определяете свой вывод под своим FD, вводите значения в нужные вам поля, а затем ЗАПИСЫВАЕТЕ запись.
Для второго вам нужно только минимальное определение под ФД (достаточно определить длину записи, которая может быть переменной, вы, вероятно, придете к этому позже) и вы проставляете значения во всех нужных вам полях, подчиненных другой элемент группы, если это необходимо. Определение под ФД может быть полным, просто оно не обязательно.
Эти данные могут быть откуда угодно в DATA DIVISION. Это может быть даже где-то еще в РАЗДЕЛЕ ФАЙЛОВ (вы увидите запись WRITE output-record FROM input-record).
FROM
при WRITE, как и INTO
при READ, является неявным MOVE
. MOVE formatted-data TO output-record и WRITE output-record, вот что говорит WRITE ... FROM ...
.
person
Bill Woodger
schedule
18.01.2016