COBOL:打印包含变量的行

Posted

技术标签:

【中文标题】COBOL:打印包含变量的行【英文标题】:COBOL: Printing A Line with a variable in it 【发布时间】:2015-02-01 18:06:41 【问题描述】:

销售额达 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.

但不知道如何在这些语句的末尾添加变量。非常感谢任何和所有帮助。我像三天前一样开始使用 cobol,所以如果你能尽可能地把所有东西都弄傻,那就太好了!

【问题讨论】:

ZZ9 是一个PICTURE,它是一个变量的属性,松散地说。因此,您可以编码05 HEADING-LINE-3-COUNT PIC ZZ9. 并且您可以根据比较逻辑在您的 PROCEDURE DIVISION 中增加 HEADING-LINE-3-COUNT。简短的回答,因为你是从一开始的:再买一本你的教科书。 【参考方案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.

你在 2 个 comp 字段中的记录计数吗

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

你应该积累这些,因为数字编辑字段(图片 zz9)实际上是 文本字段不是数字(而且许多编译器无论如何都不会让你这样做)。比较字段 应该更快。

然后在程序部门中将总计移动到上面的新字段

   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.

【讨论】:

您是否必须将 number-employee-to-10000 和另一个?或者您可以简单地将employee-accum-1 放在标题行的空间中 取决于您使用的 Cobol 版本。回溯 10 年,编辑数字(例如 zzz9)实际上是字符/字符串字段,您需要 2 个变量。我认为最新的标准允许进行反编辑,因此某些编译器将允许您将 1 添加到 zz9 字段。但是要给字段加 1,计算机需要将字段从字符表示形式转换为二进制整数,给它加 1,然后再转换回字符串。 @user38254 PIC 定义了字段的存储方式。只要该字段是动词的目标,就会发生任何必要的转换。将任何类型的计算字段放在打印行上不会给您带来太多可见结果(有时您会看到一些东西,但您不确定它的含义)。直接添加到数字编辑字段将非常非常不标准。 Bruce 已经指出了所需的诡计,所以希望一旦你知道更多,你甚至不会考虑它,即使你找到了一个允许它的编译器。

以上是关于COBOL:打印包含变量的行的主要内容,如果未能解决你的问题,请参考以下文章

如何在cobol中打印小数点?

在 python 中,如何打印不包含某个字符串的行,而不是打印包含某个字符串的行:

Python如何在包含' n'的行中打印带有换行符的文本

php 打印当前执行到的行数--为方便调试

如何使用AWK将包含特定字符串的行之后的行的第三列中的值打印到不同的文件?

sed打印删除匹配行