COBOL字符串的操作
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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