cobol - 在 COBOL 中填充数组时出现问题

标签 cobol mainframe

我遇到了非常奇怪的情况。我在 COBOL pgm 中定义了一个数组。

05  A-TABLE.                                   
    10  A-TABLE-LIST OCCURS 10 TIMES INDEXED BY A-IDX. 

        15  FILLER              PIC X(7) VALUE '<TEST>'. 
        15  A-LIST-VALUE        PIC X(30).                
        15  FILLER              PIC X(8) VALUE '</TEST>'.

我正在设置 A-IDX=1 并将“XYZ”移动到 A-LIST-VALUE(A-IDX)。 在显示 A-TABLE 时,它显示为 XYZ----------------------------- 和所有空间... :( 我不明白这里的问题是什么? 谁能帮我解决这个问题?

问候, 赛沙。

最佳答案

您不能以这种方式为表设置值。在表中设置值的一种方法是使用重新定义和单独的数据区域。

05  A-TABLE-X.
    10  FILLER PIC X(45)
        VALUE '<TEST>                              </TEST>'.
    10  FILLER PIC X(45)
        VALUE '<TEST>                              </TEST>'.
    10  FILLER PIC X(45)
        VALUE '<TEST>                              </TEST>'.
    10  FILLER PIC X(45)
        VALUE '<TEST>                              </TEST>'.
    10  FILLER PIC X(45)
        VALUE '<TEST>                              </TEST>'.
    10  FILLER PIC X(45)
        VALUE '<TEST>                              </TEST>'.
    10  FILLER PIC X(45)
        VALUE '<TEST>                              </TEST>'.
    10  FILLER PIC X(45)
        VALUE '<TEST>                              </TEST>'.
    10  FILLER PIC X(45)
        VALUE '<TEST>                              </TEST>'.
    10  FILLER PIC X(45)
        VALUE '<TEST>                              </TEST>'.

05  A-TABLE REDEFINES A-TABLE-X.     
    10  A-TABLE-LIST OCCURS 10 TIMES INDEXED BY A-IDX. 

        15  FILLER              PIC X(7). 
        15  A-LIST-VALUE        PIC X(30).                
        15  FILLER              PIC X(8).

这太麻烦了。另一种方法是在运行时在初始化段落中移动数据。

05  A-TABLE REDEFINES A-TABLE-X.     
    10  A-TABLE-LIST OCCURS 10 TIMES INDEXED BY A-IDX. 

        15  A-LIST-A            PIC X(7). 
        15  A-LIST-VALUE        PIC X(30).                
        15  A-LIST-B            PIC X(8).

PERFORM VARYING A-IDX FROM 1 BY 1 UNTIL A-IDX > 1
  MOVE '<TEST> TO A-LIST-A(A-IDX)
  MOVE SPACES TO A-LIST-VALUE(A-IDX)
  MOVE '</TEST> TO A-LIST-B(A-IDX)
END-PERFORM

我没有尝试编译任何这些,这只是徒手写的。

附带说明一下,如果您使用的是 Enterprise COBOL 版本 3.2 或更高版本,并且您正尝试在 COBOL 中创建 XML,则存在一个 XML GENERATE 语句。

关于cobol - 在 COBOL 中填充数组时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7568247/

相关文章:

COBOL 输出空白文件而不是预期输出

ibm-midrange - 返回从 cobol 到 rpg 的值

COBOL 混淆

recursion - 在 COBOL 中,是否可以递归调用一个段落?

python-3.x - 是否可以仅使用 zoautil_py 模块从数据集属性成员读取文本并打印数据集?

unix - 使用 fhinfo 的 HP UNIX Cobol 文件格式

c++ - 从 COBOL 过渡到 C++

mainframe - 一次定义数百个GDG的正确方法

mainframe - 使用 EXECIO 将 rexx 输出逻辑写入数据集?

assembly - 如何在 IBM 中使用显式寻址 (HLASM)