COBOL 解串成数组

3 arrays string cobol input record

我正在尝试将用“;”分隔的输入行解串到一个数组中。但是我无法在第一个“;”之后显示每个单词。

所以基本上,输入:你好;堆栈;溢出


输出:值:2(因为有 2 个分号)


我的记录表的第 1 行:你好


我的记录表的第 2 行:堆栈


我的记录表的第 3 行:溢出

到目前为止我的代码:

*-------------------------------------------------------------
 LINKAGE SECTION.                                             
 01  X-INPUT-LINE                   PIC X(2000).              
 01  X-SEP-CHAR                     PIC X(1).                                     
 01  X-RET-TABLE.                                             
  02 CMAX                           PIC 9(5) COMP-3.          
  02 ENTRY-REC OCCURS 0 TO 9999 TIMES DEPENDING ON CMAX       
                                      INDEXED   BY CIDX.      
   04 ENTRY-REC2.                                             
    07 LINEVALUE                    PIC X(100).               

PROCEDURE DIVISION USING X-INPUT-LINE
                         X-SEP-CHAR  
                         X-RET-TABLE.

MAIN SECTION.
MN-00.       
INITIALIZE WERT.                                

INSPECT X-INPUT-LINE TALLYING WERT FOR ALL      
        X-SEP-CHAR.                             
MOVE X-INPUT-LINE TO VAL.                       

ADD 1 TO WERT.                                  
PERFORM WERT TIMES                              
MOVE WERT TO LINEVALUE OF X-RET-TABLE (WERT)    
     UNSTRING VAL DELIMITED BY ";"              
     INTO STRVAL                                
     END-UNSTRING                               


IF CMAX OF X-RET-TABLE < 9999                   
   ADD  1  TO CMAX OF X-RET-TABLE               
   MOVE STRVAL TO ENTRY-REC(CMAX OF X-RET-TABLE)

END-IF                                          
END-PERFORM.    
Run Code Online (Sandbox Code Playgroud)

使用下面的代码,我只能在我的示例中显示“Hello”,并且程序在 3 个不同的行中显示了 3 次。

Sim*_*sch 5

您的原始代码几乎可以工作。

主要问题是,您UNSTRING使用给定的变量并始终使用相同的起点。

他我们可以使用WITH POINTER。用在STRING子句上说“存储下一个字符的位置”,用在UNSTRING它上面说“下一个字符被读取的位置”。

使用起始代码(添加调用者,实际上使用给定的分隔符而不是固定的“;”和DISPLAY结果的 a),在这里添加我们为起始点添加一个变量并使用它。

     UNSTRING X-INPUT-LINE DELIMITED BY X-SEP-CHAR
     INTO STRVAL
     END-UNSTRING
Run Code Online (Sandbox Code Playgroud)

变成

     UNSTRING X-INPUT-LINE DELIMITED BY X-SEP-CHAR
     INTO STRVAL
     WITH POINTER STARTING-POINT
     END-UNSTRING
Run Code Online (Sandbox Code Playgroud)

您还需要初始化某些部分并可以直接使用表项(只要您确保计数器不会变得太大),为您提供结果(包括更多样本)。