COBOL字符串的操作

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

COBOL字符串的操作

(—)字符串的合并STRING

一、 STRING 语句的基本用法

DATA DIVISION

WORKING-STORAGE SECTION.

01 FIRST-NAME PIC X(10).

01 LAST-NAME PIC X(10).

01 FULL-NAME PIC X(20).

PROCEDURE DIVISION.

MOVE 'ADAM' TO FIRST-NAME.

MOVE 'SMITH' TO LAST-NAME.

STRING

FIRST-NAME DELMITED BY SPACE

' ' DELIMITED BY SIZE

LAST-NAME DELIMITED BY SPACE

INTO FULL-NAME.

DISPLAY 'FIRST NAME :',FIRST-NAME.

DISPLAY 'LAST NAME :',LAST-NAME.

DISPLAY 'FULL NAME :',FULL-NAME.

STOP RUN.

输出结果:

FIRST NAME :ADAM

LAST NAME :SMITH

FULL NAME :ADAM SMITH

以上为STRING 语句的基本格式。其中每项用于合并的字符串后面都要加上DELIMITED BY 语句。DELIMITED BY 子句后面有两个选项,分别为SPACE和SIZE。

SPACE:找到前面用于合并的字符串中第一个出现空格的地方。将该空格以前的部分进行合并,空格以后的内容包括该空格在内不参与合并操作。

SIZE:将前面对应的用于合并的字符串中的全部内容进行合并。另外BY 后可以接一个变量名称,并且将该变量中保存的字符作为原字符串的截取符。截取符的用法同SPACE选项类似。

(三)字符串的替换INSPECT语句

INSPECT语句主要用于对字符串中的指定部分进行替换。字符串的替换和转换是不同的。字符串替换是将原字符串中的部分字符替换成其他字符。转换时保持原字符串的字符不变,只对其格式进行转换。

1.对全体字符进行替换

该项功能是通过在INSPECT语句中加上“ALL”选项实现的。下面这段代码将原字符中

所有字符“A”替为“B”,并且将所有的0替换为中划线。

DATA DIVISION.

WORKING-STORAGE SECTION.

01 TEST-STRING PIC X(10).

*

PROCEDURE DIVISION.

MOVE 'ADCD0A0A8B' TO TEST-STRING.

DISPLAY 'BEFORE INSPECT :',TEST-STRING.

INSPECT SOURCE-STRING

REPLACING ALL 'A' BY 'B'.

INSPECT SOURCE-STRING

REPLACING ALL 0 BY '-'.

DISPLAY 'AFTER INSPECT :',TEST-STRING.

STOP RUN.

该段代码执行后,将有如下输出信息。

BEFORE INSPECT : ADCD0A08B

AFTER INSPECT : BDCD-B-8B

这种替换方式是对字符串中满足条件的全体字符进行的替换。并且替换后生成的新字符串覆盖了以前的符串。

2.对前缀字符进行替换

这种替换方式是对字符串前面连续出现的一段字符进行替换,即对前缀字符进行的替换。该项功能是通过在INSPECT 语句中加上'LEADING'选项实现的。

下面代码对一段表示数字的字符串进行了替换。替换方式为将原字符串中的前缀0替换成前缀星号‘*’,以进

行适当的输出。

DATA DIVISION.

WORKING-STORAGE SECTION.

01 TEST-STRING PIC X(10).

*

PROCEDURE DIVISION.

MOVE '0000567.90' TO TEST-STRING.

DISPLAY 'BEFORE INSPECT :',TEST-STRING.

INSPECT TEST-STRING

REPLACING LEADING 0 BY '*'.

DISPLAY 'AFTER INSPECT :',TEST-STRING.

STOP RUN.

该代码执行后,将有如下输出信息。

BEFORE INSPECT :0000567.90

AFTER INSPECT :****567.90

通过以上代码可以发现,使用LEADING选项只是对前缀字符进行了替换。这里的前缀字符是从字符串开头处连续出现的一串字符。因此,即使原字符串中在最后还有一个字符0,也并不对其进行替换。

另外INSPECT语句还可以统计并保存前缀字符出现的次数。该项功能是通过结合

TALLYING.... FOR LEADING...实现的。其中前面一个省略号表示用以保存前缀字符出现次数的变量名。后一个省略号表示该前缀字符。以下代码统计并输出了字符串中前缀字符出现的次数。

...

DATA DIVISION.

WORKING-STORAGE SECTION.

01 TEST-STRING PIC X(10).

01 COUNT PIC 9 VALUE ZERO.

PROCEDURE DIVISION.

MOVE '0000567.90' TO TEST-STRING.

DISPLAY 'SOURCE STRING:', TEST-STRING.

INSPECT TEST-STRING

TALLYING COUNT FOR LEADING '0'.

DISPLAY 'HOW MANY LEADING 0:',COUNT.

STOP RUN.

该代码执行后,将有如下输出信息。

SOURCE STRING :0000567.90

HOW MANY LEADING 0:4

3.对首字符进行替换

只对字符串中的第一个字符进行替换。

该项功能是通过在INSPECT 语句中加上'FIRST'选项实现的。

下面代码将前缀为星号的字符串首字符替换为美元符号‘$’。

....

DATA DIVISION.

WORKING-STORAGE SECTION.

01 TEST-STRING PIC X(10).

*

PROCEDURE DIVISION.

MOVE '0000567.90' TO TEST-STRING.

DISPLAY 'SOURCE DATA :',TEST-STRING.

INSPECT TEST-STRING

REPLACING LEADING0 BY '*'.

DISPLAY 'CONVERTED DATA-1:',TEST-STRING.

INSPECT TEST-STRING

REPLACING FIRST '*' TO '$'.

DISPLAY 'CONVERTED DATA-2:',TEST-STRING.

STOP RUN.

该段代码执行后,将有如下输出信息。

SOURCE DATA: 0000567.90

CONVERTED DATA-1:****567.90

CONVERTED DATA-2:$***567.90

以上程序首先将前缀字符进行转换,之后再此基础上再对首字符进行转换。通过两次转换,最终将原始数据0000567.90转换成了标准输出格式$***567.90

相关文档
最新文档