无论如何在不使用临时变量的情况下在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
答案 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.