在COBOL中解串

时间:2018-08-29 20:16:15

标签: cobol

我正尝试使用UNSTRING DELIMITED BY SPACES将姓名字段分为名字,中间名和姓氏三个部分

UNSTRING WA-NAME DELIMITED BY SPACES 
INTO WA-FIRST-NAME
     WA-MID-NAME
     WA-LAST-NAME

但是,如果我的姓名字段超过2个空格,则会遗漏其余单词

Example : NAME : M V S PAVAN It is showing as WA-FIRST-NAME : M WA-MID-NAME : V WA-LAST-NAME : S

但是第四个单词PAVAN丢失了,我如何才能将其包含在第三个单词中。即我想将所有剩余的单词都包含在WA-LAST-NAME

2 个答案:

答案 0 :(得分:3)

要解决“我如何使第三个单词中包含该单词,即我想在WA-LAST-NAME中包括所有其余单词”(这可能不是您想要的单词)的问题,可以使用其他方法方法,但最好的方法可能会使用POINTER(源字段中的位置)。 可能为最后一项使用一个额外的计数器,导致:

 UNSTRING WA-NAME DELIMITED BY ALL SPACES  *> just in case two spaces were used
 INTO WA-FIRST-NAME
      WA-MID-NAME
      WA-LAST-NAME COUNT STRPV *> *MOVE* the amount of target length
      WITH POINTER STRPS ON OVERFLOW
      ADD 2 TO STRPV           *> adding one to be after the text, another for space
      MOVE WA-NAME (STRPS:) TO WA-LAST-NAME (STRPV:)

完整测试:http://tpcg.io/BYJXKL

donPablo已经指出,您不会获得100%自动正确的名称结果...

答案 1 :(得分:0)

使用POINTER跟踪您的位置,但是将UNSTRING分为三个UNSTRING。 在每个未字符串循环之前,使用存储的POINTER到第一个非空格(即,从当前指针进行的PERARY VARYING乘以1个UNTIL值不是空格或字符串结尾),然后从此处取消字符串。