SUBSTRING for a String Literal in COBOL

烂漫一生 提交于 2019-12-13 08:36:05

问题


Is there anyway to get a SUBSTRING of string literal in COBOL without using a temporary variable?

Let's say in the following code:

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

Is there any way to do the same thing, but without MY-VAR?

EDIT: I did tried following code, but it's failed.

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

回答1:


You can accomplish what you are trying to do by type-laundering the literal through a function. You can then substring, or reference modify, the output of the function. Consider that calling reverse twice on the same data returns the original data.

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

The above will result in a 'c' being moved to text-out.




回答2:


Of course, the example code in your question does not make any sense, as why would you write "HELLO"(1:3) when you could just write "HEL".

So you must be wanting to use a variable (or 2) in the reference modifier field(s).

If you are wanting to get the first 'N' characters of the literal, you can do this by using the reference modifier on the destination item. For example, if you compile and run the following program:

   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.

You get the resulting output:

HELLO WO

Unfortunately this method only works if you want the first 'N' characters of the literal string.

Also, the destination string must be empty before you start. In the above program, if you changed the definition of SUB-STR to be:

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

Then the result of running the program becomes:

HELLO WOH BLAH



回答3:


Put the "literal" into a field, like a constant.

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.


来源:https://stackoverflow.com/questions/8208111/substring-for-a-string-literal-in-cobol

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!