COBOL: печать строки с переменной в ней

Количество сотрудников с объемом продаж до 10 000: ZZ9

Количество сотрудников от 10 001 до 20 000 в продажах: ZZ9

Это то, что я пытаюсь сделать Где ZZ9 являются переменной. Я не совсем уверен, как это сделать, и у меня украли мою книгу, поэтому я надеялся на некоторую помощь. В моем РАБОЧЕМ РАЗДЕЛЕ у меня есть

 01  HEADING-LINE-3.
            05                      PIC X(03) VALUE SPACES.
            05                      PIC X(48) VALUE
                  "Number of employees with up to 10,000 in sales: "
 01  HEADING-LINE-4
            05                      PIC X(03) VALUE SPACES.
            05                      PIC X(52) VALUE
                  "Number of employees from 10,001 to 20,000 in sales: " 

И в моем ПРОЦЕДУРНОМ ОТДЕЛЕНИИ у меня есть

 4000-PROCESS.
              WRITE REPORT-RECORD         FROM REPORT-BLANK-LINE.
              WRITE REPORT-RECORD         FROM COLUMN-HEADING-2.
              WRITE REPORT-RECORD         FROM HEADING-LINE-3.
              WRITE REPORT-RECORD         FROM HEADING-LINE-4.

но не могу понять, как добавить переменные в конце этих операторов. Любая помощь очень ценится. Я начал работать с коболом три дня назад, так что если бы вы могли все максимально затуманить, было бы здорово!


person Bob    schedule 04.12.2014    source источник
comment
ZZ9 — это ИЗОБРАЖЕНИЕ, которое, грубо говоря, является атрибутом переменной. Таким образом, вы можете закодировать 05 HEADING-LINE-3-COUNT PIC ZZ9. И вы можете увеличить HEADING-LINE-3-COUNT, основываясь на логике сравнения, в вашем PROCEDURE DIVISION. Короткий ответ, потому что вы начинаете с нуля: получите еще один экземпляр вашего учебника.   -  person David Gorsline    schedule 04.12.2014


Ответы (1)


Просто добавьте свои числовые поля в конце объявления данных:

    01  HEADING-LINE-3.
        05                      PIC X(03) VALUE SPACES.
        05                      PIC X(48) VALUE
              "Number of employees with up to 10,000 in sales: "
        05 Number-employee-to-10000  pic zzz,zz9
    01  HEADING-LINE-4
        05                      PIC X(03) VALUE SPACES.
        05                      PIC X(52) VALUE
              "Number of employees from 10,001 to 20,000 in sales: " 
        05 Number-employee-above-10000  pic zzz,zz9.

Считаете ли вы свои рекорды в двух полях компа?

   01  ws-accumulators
       03 employee-accum-1      pic s9(9) comp. 
       03 employee-accum-2      pic s9(9) comp. 

Вы должны накапливать их, потому что числовые поля (рис. zz9) на самом деле являются текстовыми полями, а не числовыми (и многие компиляторы все равно не позволят вам это сделать). Поля Comp должны быть быстрее.

Затем в процедурном разделе переместите итоги в новые поля выше.

   4000-PROCESS.
          Move  employee-accum-1        to Number-employee-to-10000 
          Move  employee-accum-2        to Number-employee-above-10000

          WRITE REPORT-RECORD         FROM REPORT-BLANK-LINE.
          WRITE REPORT-RECORD         FROM COLUMN-HEADING-2.
          WRITE REPORT-RECORD         FROM HEADING-LINE-3.
          WRITE REPORT-RECORD         FROM HEADING-LINE-4.
person Bruce Martin    schedule 04.12.2014
comment
вам придется сделать номер-сотрудника-до-10000 и другой? или вы могли бы просто поместить employee-accum-1 на место в строках заголовков - person Bob; 05.12.2014
comment
Зависит от того, какую версию Cobol вы используете. Возвращаясь 10 лет назад, Edited-Numeric (например, zzz9) на самом деле было полем Character/String, и вам понадобятся 2 переменные. Я думаю, что последний стандарт позволяет отменить редактирование, поэтому некоторые компиляторы позволят вам добавить 1 в поле zz9. Но чтобы добавить 1 к полю, компьютер должен преобразовать поле из символьного представления в двоичное целое число, добавить к нему 1, а затем преобразовать его обратно в строку. - person Bruce Martin; 05.12.2014
comment
@user38254 user38254 PIC определяет, как хранится поле. Всякий раз, когда это поле является целью глагола, будет иметь место любое необходимое преобразование. Помещение вычислительного поля любого типа в строку печати не даст вам много видимых результатов (иногда вы что-то увидите, но не будете знать наверняка, что это означает). Добавление непосредственно к числовому редактируемому полю было бы очень, очень нестандартным. Брюс указал на махинации, которые потребуются, поэтому, надеюсь, когда вы узнаете немного больше, вы никогда даже не подумаете об этом, даже если найдете компилятор, который это позволит. - person Bill Woodger; 05.12.2014