2014-11-12 1 views
1

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

FD CR1 
     LABEL RECORD IS STANDARD 
     DATA RECORDS ARE FIRSTSTR, SECONDSTR, THIRDSTR. 

и 3 структуры

01 FIRSTSTR. 
     05 FIRSTFIVE  PIC X(05). 
     05 SECONDFIVE  PIC X(05). 

    01 SECONDSTR. 
     05 FIRSTTWO  PIC X(02). 
     05 SECONDONE  PIC X(01). 
     05 THIRDFOUR  PIC X(04). 

    01 THIRDSTR. 
     05 FIRSTTHREE  PIC X(03). 
     05 SECONDTHREE  PIC X(03). 
     05 THIRDTHREE  PIC X(03). 

Могу ли я записать все данные в файле так:

WRITE FIRSTSTR, SECONDSTR, THIRDSTR. 

и чтение из файла в 3-х структур, как это:

READ CR1 INTO FIRSTSTR, SECONDSTR, THIRDSTR AT END 
+1

Ваш FD в порядке, но ваши инструкции READ и WRITE не являются стандартными COBOL. Вы должны будете делать I-O одну запись за раз. –

+0

Было бы хорошо знать, какой конкретный компилятор COBOL и ОС вы используете. –

ответ

4

Да, вы можете записать более одного типа записи в файл, но нет, вы не можете сделать это так, как хотите.

Рекорды (структуры) под FD все занимают одно и то же место хранения, то есть все начальные уровни 01 начинаются с одного и того же байтового адреса. Отдельные записи не могут одновременно содержать разные данные.

Это называется «неявные отклонения».

READ ... INTO ... должен читать и в то же время копировать текущую запись в пункт INTO (единственное число), которое вы укажете. Элемент INTO обычно находится в WORKING-STORAGE (хотя они также могут быть в LOCAL-STORAGE). Было бы экзотично использовать LINKAGE SECTION и очень, очень, странно использовать что-то в FILE SECTION в качестве цели для READ ... INTO....

Вы только READ одна запись за раз. Если у вас нет набора файлов с фиксированным размером в камне, то мы обычно должны указывать READ файл, идентифицировать запись и затем обрабатывать этот тип записи.

Вы можете указать только один принимающий элемент для READ ... INTO ... и только один источник для WRITE ... FROM ....

+0

Большое спасибо) –