【问题标题】:How to remove leading zeroes in COBOL? [closed]如何删除 COBOL 中的前导零? [关闭]
【发布时间】:2021-09-18 02:32:37
【问题描述】:
           05 nStateNumOut   PIC 99.
           05 filler         PIC XX                VALUE SPACES.
           05 xOutputName    PIC X(20).
           05 filler         PIC XX                VALUE SPACES.
           05 neOutputPop    PIC ZZZ,ZZZ,ZZZ9(8).
           05 filler         PIC XX                VALUE SPACES.
           05 neOutputArea   PIC ZZZ,ZZZ9(6).
           05 neOutputDen    PIC ZZZ,ZZZ9,999.99.
           05 neTotalPopOut  PIC ZZZ,ZZZ9(10).

我需要去掉前导零并在需要的地方放置逗号。这就是我的最终结果。

 Alabama               04447100  050750  00087
00  Alaska                00626932  570374  00001
00  Arizona               05130632  113642  00045

【问题讨论】:

  • 我看不出这些结果与输入有什么关系,而且根本没有逗号。
  • 最后一位是输出。第一部分是我想编辑以添加逗号并去掉前导零
  • 缺少的部分:“原点”的变量定义和将它们放在 ne 变量中的实际 MOVE

标签: cobol


【解决方案1】:

就我 45 年前的记忆而言。 PIC ZZZ ,ZZZ9(6) 是一个 12 位数字,有 6 个零抑制数字和 6 个非零抑制数字,以及一个奇怪放置的逗号分隔符。

如果您不想使用前导零,请不要写 9(6)。使用 Z(6)。或者可能是 Z(5)9。

“区域”真的需要 12 位数字,每 3 位数字有一个逗号吗?如果是这样,那就是 PIC ZZZ,ZZZ,ZZZ,ZZ9。


例子:在https://www.jdoodle.com/execute-cobol-online/执行

IDENTIFICATION DIVISION.
PROGRAM-ID. ZERO.
DATA DIVISION.
    WORKING-STORAGE SECTION.
        77 X PIC Z(8)9.
        77 Y PIC 9(9).
PROCEDURE DIVISION.
    MOVE 1234 TO X.
    MOVE 1234 TO Y.
    DISPLAY 'X=', X, ' Y=', Y.
STOP RUN.

展示

X=     1234 Y=000001234

【讨论】:

  • 好的,我尝试了 z(6) 方法,它仍然有前导零
  • 为我工作,见编辑。
  • 数据如何进入这些字段?您显示的部分结构是记录定义的一部分吗?数据文件中是否已经存在前导零的数据?假设:如果你用前导零写了记录,用不同的 PIC 再次读入它不会更新单个字段以反映新的 PIC。但是由于我们没有代码可以查看,所以很难说。你能发布一个最小可重现的例子吗?
【解决方案2】:

您的声明定义了太大的字段。例如

05 neOutputPop    PIC ZZZ,ZZZ,ZZZ9(8).

这相当于:

05 neOutputPop    PIC ZZZ,ZZZ,ZZZ99999999.

现在只有大于 99999999 的数字才会在您想要消零的位置有任何数字。在您的样本数据中,人口数是 8 位数字,因此“Z”位中没有非零数字。

您的声明确实已经有前导零抑制,实际上它确实有效,因为您在“Z”位置看不到零。对吧?

你需要的是

05 neOutputPop    PIC ZZZ,ZZZ,ZZ9.

【讨论】:

    【解决方案3】:

    我不知道你最多要显示多少位数,所以我发布一个通用的解决方案:

        05  9digits         pic zzz,zzz,zz9.
    

    这会显示

              1
             12
            123
          1,234
         12,345
        123,456
      1,234,567
     12,345,678
    123,456,789
    

    【讨论】:

      猜你喜欢
      • 2021-08-10
      • 1970-01-01
      • 2016-09-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-21
      • 1970-01-01
      相关资源
      最近更新 更多