字符串的转换是以原字符串的字符为基础进行的格式上的转换,并不对原字符进行替换。主要有两种转换方式:一种是对于由字母组成的字符串中字母大小写的转换方式;另一种是将由数字组成的字符串转换为具体数值。
1.FUNCTION 语句实现字符串中字母大小写的转换。
其关键之处是在该语句后加上LOWER-CASE,或者UPPER-CASE选项。
下面的代码使用LOWER-CASE选项,将字符串中的字母全部转换为小写格式。
DATA DIVISION.
WORKING-STORAGE SECTION.
01 SOURCE-STR PIC X(5).
01 NEW-STR PIC X(5).
*
PROCEDURE DIVISION.
MOVE 'AB-CDE' TO
SOURCE-ATR.
DISPLAY SOURCE-STR.
DISPLAY FUNCTION LOWER-CASE(SOURCE-STR).
MOVE 'Ab-Cde' TO SOURCE-STR.
DISPLAY SOURCE-STR.
DISPLAY FUNCTION LOWER-CASE(SOURCE-STR).
MOVE FUNCTION LOWER-CASE(SOURCE-STR) TO NEW-STR.
DISPLAY NEW-STR.
DISPLAY SOURCE-STR.
STOP RUN.
执行后为:
AB-CDE
ab-cde
Ab-Cde
ab-cde
Ab-Cde
LOWER-CASE
只将字符串中的大写字母转换为对应的小写形式。对于字符串中原本为小写的字母字符,以及其他字符不做处理
LOWER-CASE
只是临时对其进行转换,转换后的结果只在该条语句有效。即LOWER-CASE并不将转换结果保存到原字符串中。若要保存转换后的字符串,通常使用MOVE
语句将其保存到一个新的字符串变量中。
与LOWER-CASE对应,UPPER-CASE是将字符串中的字母转换为对应的大写形式。
2.将字符串转换为具体数值
将字符串转换为具体数值将是字符串转换中用处很大的一种转换方式。转换成具体数值后,该数值同其他普通字符一样,可以参与算术运算了。同时,当需要从键盘输入相应数值时,也更加方面一些。
此处是通过在FUNCTION语句后面加上NUMVAL或者NUMVAL-C实现的。
下面使用NUMVAL的用法。
....
DATA DIVISION.
WORKING-STORAGE SECTION.
01 SOURCE-STR-1 PIC X(10).
01 SOURCE-STR-2 PIC X(10).
01 RESULT PIC S99V99.
01 RESULT-DPL PIC $$$.99.
*
PROCEDURE DIVISION.
MOVE '-10.50' TO SOURCE-STR-1.
MOVE '12.80' TO SOURCE-STR-2.
COMPUTE RESULT =
FUNCTION NUMVAL(SOURCE-STR-1)
+ FUNCTION NUMVAL(SOURCE-STR-2).
MOVE RESULT TO RESULT-DPL.
DISPLAY 'RESULT :',RESULT-DPL.
STOP RUN.
输出结果是:
RESULT :$2.30
FUNCTION NUMVAL
语句将以上两个变量中的字符串转换成具体数值。并将这两个具体数值相加后将结果存入RESULT变量中。RESULT
变量被定义为一个Signed Numbers符号类型数据,保存的是具体数值。
程序最后将RESULT变量中的具体数值MOVE到RESULT-DPL变量中以用于输出。RESULT-DPL变量被定义为一个Numeric
Edited Fields格式输出类型。因此,这里相当于又将具体数值转换回成了字符串。
NUMVAL-C相当于是NUMVAL的扩展。当原始字符串出现以下情况时,必须使用NUMVAL-C选项。
原始字符串中有货币流通符号$。
原始字符串中有分隔符逗号。
另外,无论NUMVAL还是NUMVAL-C都允许原字符串中出现正负号。并且,转换后的实际是指遵循原字符串中所指定的正负性。
当需要从键盘输入具体数值时,用FUNCTION
的输入方式会更加方便。假设输入数值所被保存的变量为INPUT-DATA,该变量定义如下。
01 INPUT-DATA PIC S999V99.
如令该变量中的数值通过键盘输入的语句如下。
ACCEPT INPUT-DATA FROM CONSOLE
此时用户需要在键盘上输入的数据必须严格按照INPUT-DATA定义的格式来进行。例如,当用户需要输入2.50和-100.00这两个数值时,输入方式必须为:
+002.50
-100.00
当使用将字符串转换为具体数值的方式时,代码可以做如下更改。
01 INPUT-STR PIC X(10).
01 INPUT-DATA PIC S999V99.
....
ACCEPT INPUT-STR FROM CONSOLE.
COMPUTE INPUT-DATA=FUNCTION NUMVAL(INPUT-STR).
只要如下输入方式即可:
2.50
-100