在COBOL中对字符串文字进行SUBSTRING

时间:2011-11-21 06:35:24

标签: cobol

无论如何在不使用临时变量的情况下在COBOL中获取字符串文字的SUBSTRING?

让我们在下面的代码中说:

MOVE "HELLO" TO MY-VAR.
MOVE MY-VAR(1:3) TO SUB-STR.

有没有办法做同样的事情,但没有MY-VAR

编辑: 我确实尝试过以下代码,但它失败了。

MOVE "HELLO"(1:3) TO SUB-STR   * COMPILE ERROR

3 个答案:

答案 0 :(得分:2)

您可以通过函数对文字进行类型清洗来完成您要执行的操作。然后,您可以对函数的输出进行子串或引用修改。考虑在相同数据上反向调用两次会返回原始数据。

Move function reverse                           
 ( function reverse( 
      'abcdefg' 
   )
 ) (3:1) to text-out

以上将导致'c'被移动到文本输出。

答案 1 :(得分:0)

当然,你问题中的示例代码没有任何意义,因为当你可以写"HELLO"(1:3)时,为什么要写"HEL"

所以你必须要在引用修饰符字段中使用变量(或2)。

如果您想获得文字的第一个“N”字符,可以使用目标项上的参考修饰符来完成此操作。例如,如果您编译并运行以下程序:

   IDENTIFICATION DIVISION.
   PROGRAM-ID. HELLO.
   DATA DIVISION.
   WORKING-STORAGE SECTION.
   01 LEN          PIC 99 VALUE 8.
   01 SUB-STR      PIC X(80).
   PROCEDURE DIVISION.
       MOVE "HELLO WORLD" TO SUB-STR(1:LEN).
       DISPLAY SUB-STR.
       STOP RUN.

您得到结果输出:

HELLO WO

不幸的是,只有你想要文字字符串的第一个'N'字符时,此方法才有效。

此外,在开始之前,目标字符串必须为空。在上述程序中,如果您将SUB-STR的定义更改为:

01 SUB-STR      PIC X(80) VALUE "BLAH BLAH BLAH".

然后运行程序的结果变为:

HELLO WOH BLAH

答案 2 :(得分:0)

将“literal”放入一个字段中,就像常量一样。

IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 LITERAL-HELLO PIC X(5) VALUE 'HELLO'.
PROCEDURE DIVISION.
    DISPLAY LITERAL-HELLO(1:3).
    STOP RUN.