COBOL字符串的操作
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
COBOL字符串的操作
(―)字符串的合并string一、string语句的基本用法datadivision
working-storagesection.01first-namepicx(10).01last-namepicx(10).01full-namepicx(20).proceduredivision.
move'adam'tofirst-name.move'smith'tolast-name.string
first-namedelmitedbyspace''delimitedbysize
last-namedelimitedbyspaceintofull-name.
display'firstname:',first-name.display'lastname:',last-
name.display'fullname:',full-name.stoprun.
输入结果:
firstname:adamlastname:smith
fullname:adamsmith
以上为string语句的基本格式。
其中每项用于合并的字符串后面都要加上delimitedby语句。
delimitedby子句后面有两个选项,分别为space和size。
space:找出前面用作分拆的字符串中第一个发生空格的地方。
将该空格以前的部分展开分拆,空格以后的内容包含该空格在内不参予分拆操作方式。
size:将前面对应的用于合并的字符串中的全部内容进行合并。
另外by后可以接一个变量名称,并且将该变量中保存的字符作为原字符串的截取符。
截取符的用法同space选项类似。
(三)字符串的替代inspect语句
inspect语句主要用于对字符串中的指定部分进行替换。
字符串的替换和转换是不同的。
字符串替换是将原字符串中的部分字符替换成其他字符。
转换时保持原字符串的字符不变,只对其格式进行转换。
1.对全体字符进行替换
该项功能就是通过在inspect语句中加之“all”选项同时实现的。
下面这段代码将原字符中
所有字符“a”替为“b”,并且将所有的0替换为中划线。
datadivision.
working-storagesection.01test-stringpicx(10).*
proceduredivision.
move'adcd0a0a8b'totest-string.display'beforeinspect:',test-
string.inspectsource-string
replacingall'a'by'b'.inspectsource-string
replacingall0by'-'.
display'afterinspect:',test-string.stoprun.
该段代码执行后,将存有如下输入信息。
beforeinspect:adcd0a08bafterinspect:bdcd-b-8b
这种替换方式是对字符串中满足条件的全体字符进行的替换。
并且替换后生成的新字符串覆盖了以前的符串。
2.对前缀字符进行替换
这种替代方式就是对字符串前面已连续发生的一段字符展开替代,即为对后缀字符展开的替代。
该项功能就是通过在inspect语句中加之'leading'选项同时实现的。
下面代码对一段则表示数字的字符串展开了替代。
替代方式为将原字符串中的后缀0替换成后缀星号‘*’,以展开适度的输入。
datadivision.
working-storagesection.01test-stringpicx(10).*
proceduredivision.
move'0000567.90'totest-string.display'beforeinspect:',test-
string.inspecttest-string
replacingleading0by'*'.
display'afterinspect:',test-string.stoprun.
该代码执行后,将存有如下输入信息。
beforeinspect:0000567.90afterinspect:****567.90
通过以上代码可以发现,使用leading选项只是对前缀字符进行了替换。
这里的前缀字符是从字符串开头处连续出现的一串字符。
因此,即使原字符串中在最后还有一个字符0,也并不对其进行替换。
另外inspect语句还可以统计数据并留存后缀字符发生的次数。
该项功能就是通过融合
tallying....forleading...实现的。
其中前面一个省略号表示用以保存前缀字符出现次数的变量名。
后一个省略号表示该前缀字符。
以下代码统计并输出了字符串中前缀字符出现的次数。
...
datadivision.
working-storagesection.01test-stringpicx(10).
01countpic9valuezero.proceduredivision.
move'0000567.90'totest-string.display'sourcestring:',test-
string.inspecttest-string
tallyingcountforleading'0'.display'howmanyleading0:',count.stoprun.
该代码执行后,将有如下输出信息。
sourcestring:0000567.90howmanyleading0:43.对首字符进行替换
只对字符串中的第一个字符展开替代。
该项功能是通过在inspect语句中加上'first'选项实现的。
下面代码将前缀为星号的字符串首字符替换为美元符号‘$’。
....
datadivision.
working-storagesection.01test-stringpicx(10).*
proceduredivision.
move'0000567.90'totest-string.display'sourcedata:',test-
string.inspecttest-string
replacingleading0by'*'.
display'converteddata-1:',test-string.inspecttest-string
replacingfirst'*'to'$'.
display'converteddata-2:',test-string.stoprun.
该段代码执行后,将存有如下输入信息。
sourcedata:0000567.90
converteddata-1:****567.90converteddata-2:$***567.90
以上程序首先将后缀字符展开切换,之后再此基础上再对首字符展开切换。
通过两次切换,最终将原始数据0000567.90转换成了标准输入格式$***567.90
(四)-字符串的转换function语句
字符串的切换就是以原字符串的字符为基础展开的格式上的切换,并不对原字符展开替代。
主要存有两种切换方式:
一种是对于由字母组成的字符串中字母大小写的转换方式;另一种是将由数字组成的字符串转换为具体数值。
1.function语句实现字符串中字母大小写的转换。
其关键之处就是在该语句后加之lower-case,或者upper-case选项。
下面的代码使用lower-case选项,将字符串中的字母全部转换为小写格式。
datadivision.
working-storagesection.01source-strpicx(5).01new-strpicx(5).*
proceduredivision.
move'ab-cde'tosource-atr.displaysource-str.
displayfunctionlower-case(source-str).move'ab-cde'tosource-
str.displaysource-str.
displayfunctionlower-case(source-str).
movefunctionlower-case(source-str)tonew-str.displaynew-str.displaysource-str.stoprun.
继续执行后为:ab-cdeab-cdeab-cdeab-cdeab-cde
lower-case只将字符串中的大写字母转换为对应的小写形式。
对于字符串中原本为小写的字母字符,以及其他字符不做处理
lower-case只是临时对其展开切换,切换后的结果只在该条语句有效率。
即lower-case并不将切换结果留存至原字符串中。
若必须留存切换后的字符串,通常采用move语句将其留存至一个代莱字符串变量中。
与lower-case对应,upper-case是将字符串中的字母转换为对应的大写形式。
2.将字符串转换为具体数值
将字符串切换为具体内容数值将就是字符串切换中用处非常大的一种切换方式。
转换成具体内容数值后,该数值同其他普通字符一样,可以参予算术运算了。
同时,当须要从键盘输入适当数值时,也更加方面一些。
此处是通过在function语句后面加上numval或者numval-c实现的。
下面采用numval的用法。
....
datadivision.
working-storagesection.01source-str-1picx(10).01source-str-
2picx(10).01resultpics99v99.01result-dplpic$$$.99.*
proceduredivision.
functionnumval(source-str-1)+functionnumval(source-str-
2).moveresulttoresult-dpl.display'result:',result-dpl.stoprun.输入结果就是:result:$2.30
functionnumval语句将以上两个变量中的字符串转换成具体数值。
并将这两个具体数值相加后将结果存入result变量中。
result变量被定义为一个signednumbers符号类型数据,保存的是具体数值。
程序最后将result变量中的具体内容数值move至result-dpl变量中以用作输入。
result-dpl变量被定义为一个numericeditedfields格式输入类型。
因此,这里相等于又将具体内容数值切换回成了字符串。
numval-c相当于是numval的扩展。
当原始字符串出现以下情况时,必须使用numval-c选项。
完整字符串中存有货币流通符号$。
完整字符串中存有分隔符逗号。
另外,无论numval还是numval-c都容许原字符串中发生正负号。
并且,切换后的实际就是指遵从原字符串中所选定的差值性。
当需要从键盘输入具体数值时,用function的输入方式会更加方便。
假设输入数值所被保存的变量为input-data,该变量定义如下。
01input-datapics999v99.
如令该变量中的数值通过键盘输入的语句如下。
acceptinput-datafromconsole此时用户须要在键盘上输出的数据必须严苛按照input-data定义的格式去展开。
比如,当用户须要输出2.50和-100.00这两个数值时,输出方式必须为:+002.50-100.00
只要如下输入方式即可:2.50-100。