在 COBOL 中解串

Unstring in 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

中包含所有剩余的单词

为了解决问题 "how can i get that included in my third word. i.e, i want to include all the remaining words in 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% 的自动正确姓名结果...

使用 POINTER 来跟踪您所在的位置,但将 UNSTRING 拆分为三个 UNSTRING。 在使用存储的指针到第一个非 space 的每个 unstring 循环之前(即从当前指针执行 1 UNTIL 值不是 space 或字符串结尾的 PERFORM VARYING)并从那里 unstring。