22252

[code]

    IDENTIFICATION DIVISION.
    PROGRAM-ID. CALC.
    DATA DIVISION.
    WORKING-STORAGE SECTION.
      01 TESTCALCARRAY.
        03 TESTVAR OCCURS 5 PIC 9(5) VALUE 0.
      01 TESTDISPARRAY.
        03 TESTDISP OCCURS 5 PIC ZZZZ9.
      01 SUMVAR PIC 99999 VALUE 0.
    PROCEDURE DIVISION.
      MAIN SECTION.
      ADD 5 TO TESTVAR(1) TESTVAR(2) TESTVAR(3) TESTVAR(4) TESTVAR(5).
      SUBTRACT 1 FROM  TESTVAR(2).
      DIVIDE  TESTVAR(1) BY 3 GIVING  TESTVAR(4) REMAINDER  TESTVAR(3).
      MULTIPLY TESTVAR(1) BY 0 GIVING  TESTVAR(5).
      COMPUTE SUMVAR = TESTVAR(1)+TESTVAR(2)+TESTVAR(3)+TESTVAR(4)+TESTVAR(5)
      DISPLAY TESTCALCARRAY.
      DISPLAY SUMVAR.
      MOVE TESTCALCARRAY TO TESTDISPARRAY.
      DISPLAY TESTDISPARRAY.
      STOP RUN.
    
[/code]

このようなコードを書いたのですが、  
最後のDISPLAY TESTDISPARRAYが

[code]

    0000500004000020000100000
    
[/code]

となってしまいます。

[code]

    □□□□5□□□□4□□□□2□□□□1□□□□0
    
[/code]

となる想定なのですが、どの部分が違っているでしょうか？

よろしくお願いします。


CC BY-SA 3.0
2016-02-18T15:43:04.837
22247
2016-02-19T06:11:38.550
2016-02-18T16:13:20.023
7837
8823
question
cobol
COBOLのゼロサプレスの仕様


`WORKING-STORAGE
SECTION`の`01`のところは[集団項目](http://itdoc.hitachi.co.jp/manuals/3020/3020378270/LANG0075.HTM)ですので、`PIC`句は[利用不可](http://www.csis.ul.ie/cobol/course/DataDeclaration.htm#part3)みたいです。そのために、集団項目を`DISPLAY`してみると、集団項目は内側のレベル番号の`PIC`句のフォーマティングまで読めないのだと私は思っています。

一方で、内側のレベル番号を独立的に`DISPLAY`してみると、`PIC`句のフォーマティングが表示されるみたいですね。例えば、`DISPLAY
TESTDISP(1)`

それでは、`PIC`句のフォーマティングを保存するために、繰り返し文を[使う](http://www.tutorialspoint.com/cobol/try_cobol.php)のはどうですか。

コード例：

[code]

    IDENTIFICATION DIVISION.
    PROGRAM-ID. EXAMPLE.
    DATA DIVISION.
    WORKING-STORAGE SECTION.
      01 TESTCALCARRAY.
        03 TESTVAR OCCURS 3 PIC 9(5) VALUE 0.
      01 TESTDISPARRAY.
        03 TESTDISP OCCURS 3 PIC ZZZZ9.
      01 C PIC 99 VALUE 1.
    PROCEDURE DIVISION.
      MAIN SECTION.
      ADD 1 TO TESTVAR(1)
      ADD 2 TO TESTVAR(2)
      ADD 3 TO TESTVAR(3)
      PERFORM EXAMPLE-LOOP UNTIL C>3.
      STOP RUN.
    
      EXAMPLE-LOOP.
      MOVE TESTVAR(C) TO TESTDISP(C).
      DISPLAY TESTDISP(C) WITH NO ADVANCING.
      ADD 1 TO C.
    
[/code]

コードの結果：

[code]

        1    2    3
    
[/code]


CC BY-SA 3.0
2016-02-18T23:14:40.317
22252
2016-02-19T06:11:38.550
2016-02-19T06:11:38.550
4129
4129
22247
answer