Добавляет ли работа только для полей в РАЗДЕЛЕ ХРАНИЛИЩА.? - PullRequest
2 голосов
/ 25 апреля 2020

Кажется, что такая программа не работает.

   PROGRAM-ID. Test.
   ENVIRONMENT DIVISION.
   INPUT-OUTPUT SECTION.

   FILE-CONTROL.
       SELECT CountFile ASSIGN TO "count.dat"
           ORGANIZATION IS LINE SEQUENTIAL.

   DATA DIVISION.
   FILE SECTION.

   FD CountFile.
   01 CountDetails.
       02 FCountA          PIC 99 VALUE 0.
       02 FCountB          PIC 99 VALUE 0.

   WORKING-STORAGE SECTION.
   PROCEDURE DIVISION.

   Begin.

       OPEN OUTPUT CountFile

       ADD 1 TO  FCountA
       ADD 1 TO  FCountB

       WRITE CountDetails
       CLOSE CountFile

       STOP  RUN.

Это записывает 9999 в файл count.dat. ДОБАВЛЕНИЕ работает для полей в РАЗДЕЛЕ ХРАНЕНИЯ, но не в РАЗДЕЛЕ ФАЙЛА.

Это правда?

1 Ответ

4 голосов
/ 25 апреля 2020

Q: Это правда?
A: Нет, это не так.

ADD работает для любого поля цифра c, независимо от того, где оно находится сохранено.

Обратите внимание, что данные в FILE SECTION гарантированно будут доступны только после успешного OPEN (как вы упомянули GnuCOBOL: этот всегда обеспечивает хранилище). У него нет гарантированного значения, поэтому вы, вероятно, захотите INITIALIZE данных.

Образец образца COBOL, который показывает оба и может быть настроен и выполнен :

IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO-WORLD.
ENVIRONMENT DIVISION.
       input-output section.
       file-control.
           select test-file
           assign to 'test-file'
           organization is line sequential.

 data division.
 file section.
       fd test-file.
           01 num-var  pic 9 value 0.
 working-storage section.
           01 num2-var  pic 9 value 0.
PROCEDURE DIVISION.
ADD  1 TO num-var num2-var
DISPLAY 'Hello, num ' num2-var ' and file ' num-var.
INITIALIZE num-var num2-var
ADD  1 TO num-var num2-var
DISPLAY 'Hello, num ' num2-var ' and file ' num-var.
ADD num2-var to num-var
ADD num2-var to num-var
DISPLAY 'Hello, num ' num2-var ' and file ' num-var.
ADD num-var to num-var
DISPLAY 'Hello, num ' num2-var ' and file ' num-var.
STOP RUN.

Осторожно: это справочный формат фиксированной формы, не обязательно переносимый, пропущенный OPEN может означать, что он прерывается - и это не очень хороший стиль - но продемонстрировать проблему.

...