COBOL NOTES(二)
作者:习惯有你 日期:2007-05-15
字符处理
一.STRING 语句
77 A PIC X(3) VALUE ‘ABC’。
77 B PIC X(5) VALUE ALL“*”。
PROCEDURE DIVISON.
…
STRING A DELIMITED BY SIZE INTO B.
…
STRING语句执行后,B中内容为
ABC**
1.STRING语句经常把多个发送字符串连接成一个较成的字符串。
STRING A B C DELIMITED BY SIZE INTO D.
2.发送不仅可以是变量,也可以是常量(不得为象征常量ALL)
STRING PROVINCE SPACE CITY “ “ STREET DELIMITED BY SIZE INTI ADDRESS.
SPACE,一个空格,同时在城市与街道间插入3个空格
DELIMITED 短语
DELIMITED BY (定界)短语,除了使用保留字SIZE,表示整个发送项参加连接操作外,还可以在BY的后面使用字符值常量或字符型数据项。BY后面的字值常量或数据项内容称作定界符。在执行STRING语句时,发送项的内容以定界符为界,定界符左边的内容参加合并操作,定界符本身及其右方的内容舍去不用。如果发送项中没有与定界符相匹配的内容,整个发送项全参加合并操作。定界符可以是单字符,也可以是多字符的字符串 。
77 A PIC X(5) VALUE “ABCDE”。
77 B PIC X(5) VALUE “EFGHI”。
77 C PIC X(10) VALUE ALL“*”。
STRING A DELIMITED BY “C”,B DELIMITED BY “F“
INTO C。
则执行后,以的内容为
ABE*******。
POINTER短语
POINTER(指针)短语是针对接收项的,因为每个STRING语句只能有一个接收项,所以每个STRING语句只能有一个POINTER短语。
POINTER短语,用于规定接收项开始接收字符的起始位置。这个位置用接收项字符位置的相对号来表示,接收项左起第1字节的相对号是1,第2字节的相对号是2,。。。。。
77 P PIC 99.
MOVE 2 TO P.
STRING A B DELIMITED BY “C”
INTO C WITH POINTER P.
执行后,C的内容为
*ABEFGHI**
P的值变为9(2+7)。
OVERFLOW 短语
产生溢出的情况
1. 接收项已满,尚有未发送的字符。
2. 接收项已满,尚有未经处理的发送项
3. 指针短语中的指针变量值不合理,小于1或大于接收项长度。
STRING A B BY SIZE INTO C WITH POINTER P ON OVERFLOW GOTO ERR-OVER。
二.UNSTRING语句
UNSTRING语句与STRING语句作用相反,将字符串拆成若干字符串
规则:
如果发送项长度小于各接收项长度之和。
1. 某接收项未装满
2. 某接收项刚好装满,其右方各接收项没有接收内容。
对于1,系统将未接收项中尚未接收内容的字符位置填充空格,该接收项以右各接收项内容不变。
对于2,凡未已旧换新内容的项均维持原内容不变
UNSTRING A INTO B C。
DELIMITED 语句
定界符可以是单字符,也可以是多字符,但不可角STRING语句那样,采用保留字SIZE,必须是字符字值常量或字符型数据项。
如果发送项有多个字符或字符串与定界符匹配,则第一个匹配定界符以左的全部内容,作为一个发送字符串,发送给第一接收项,第二个匹配定界符以左,第一匹配定界符以右的内容,作为又一发送字符串,发送给第二接收项。若2个匹配定界符连在一起,相应接收项则接空格或0。
一个定界短语可有多个定界符,各定界符之间用OR连接,OR表示各定界符只要一个与发送项匹配成功,就确定发送。
UNSTRING A DELIMITED BY “,“ OR ”。“ INTO B C。
有时要以连续出现的同样字符作为定界符,在这种情况下,可在字符字值前冠以保留字ALL。
COUNT 短语
COUNT 短语是把发送字符串的长度记录在一个用户定义的数据项中
如A内容:ABCD//E5
B:PIC XXX
C:PIC XXX
D:PIC XXX
执行
UNSTRING A DELIMTED BY ‘/’
INTO B COUNT IN COUNT-B
C
D.
则B:ABC
C: (3个空格)
D:E5 (后有一个空格)
COUNT-B值为4。
DELIMITER短语
DELIMITER(定位符存贮)短语
UNSTRING A DELIMITER BY “,” or “;” or ALL “/”
INTO B DELIMITER IN DELIM-B
C DELIMITER IN DELIM-C.
当没有匹配发生时,该接收项对应的定界符存贮区被清成空格
POINTER短语
用来指示发送项的字符位置
此短语通常 在单接收项的情况下与DELIMITER短语联合使用。
77 DELIM PIC X.
77 PNTR PIC 99.
77 ACCEPT-AREA PIC X(80).
01 DATA-RECORD
03 DATA-ITEM PIC 9(6)
OCCURES 10 TIMES
INDEXED BY INDEX.
PROCEDURE DIVISION.
DISPLAY “PLEASE ENTER YOUR DATA.”
ACCEPT ACCEPT-AREA.
MOVE 1 TO PNTR.
MOVE LOW-VALUE TO DELIM.
PERFORM UNSTR-PROCESS
VARYING INDEX FROM 1 BY 1
UNTIL DELIM=”*”
UNSTR-PROCESS.
UNSTRING ACCEPT-AREA DELIMITED BY ALL SPACES or “*”
INTO DATA-ITEM(INDEX)
DELIMITER IN DELIM
WITH PROINTER PNTR.
TALLYING 短语
计算实际接收到了多少数据
MOVE ZERO TO TLY.
UNSTRIGN A DELIMITED BY ALL SPACE or “*”
INTO B C D E F
TRLLYING IN TLY.
假如A只发送了三个字符串,则TLY=3
本短语应在POINTER语句之后,而这2个短语又必须在DELIMITER和COUNT之后
OVERFLOW短语
溢出情况
1. 指针数值项值不合理,小于1或大于发送项长度。若不合理,不执行UNSTRING语句,控制转向溢出短语规定的命令语句
2. 当所有接收项已装满,但发送项尚有未和定界符茶杯的数据,或者尚有未被包含在发送字符串中的数据。此时先执行UNSTRING语句,而后控制转向溢出短语规定的命令语句
三.INSPECT语句
1> INSPECT/TALLYING语句
INSPECT A TALLYING TLY FOR ALL “A”
对指定字符串的所有出现进行计数,即数据项中每出现一个指定的字符串,计数器就加1
INSPECT A TALLYING TLY FOR LEADING “*”
对指定字符串作为前缀进行计数,计算数据项中从第一个字符开始连续出现多少指定的字符串。
INSPECT A TALLYING FLY FOR CHARACTERS
对所有出现的字符进行计数
INSPECT A TALLYING T1 FOR “.” AFTER “A”
T2 FOR “;” BEFORE “B”
2>INSPECT/REPLACING语句
INSPECT A REPLACING CHARACTERS BY SPACE BEFORE “*”.
用空格替代*前的全部字符
INSPECT A REPLACING ALL “AB” BY “XY”
ALL “CD” BY “AB”
用XY替代AB,AB替代CD
INSPECT A REPLACING LEADING SPACE BY ZERO BEFORE “**”
用0替代**之前的前缀为空格的前缀
如:A为_ _ 2_ 3**,替代后A为002_3**
A为1_2_3_**,替代后A不变
INSPECT A REPLACING FIRST “+” BY “-“ AFTER SPACE
用-替代空格后第一次出现+的
3>INSPECT/TALLYING/REPLACING语句
MOVE ZERO TO TLY.
INSPECT A TALLYING TLY FOR ALL “L”
REPLACING LEADING “A” BY “E” AFTER “L”.
一.STRING 语句
77 A PIC X(3) VALUE ‘ABC’。
77 B PIC X(5) VALUE ALL“*”。
PROCEDURE DIVISON.
…
STRING A DELIMITED BY SIZE INTO B.
…
STRING语句执行后,B中内容为
ABC**
1.STRING语句经常把多个发送字符串连接成一个较成的字符串。
STRING A B C DELIMITED BY SIZE INTO D.
2.发送不仅可以是变量,也可以是常量(不得为象征常量ALL)
STRING PROVINCE SPACE CITY “ “ STREET DELIMITED BY SIZE INTI ADDRESS.
SPACE,一个空格,同时在城市与街道间插入3个空格
DELIMITED 短语
DELIMITED BY (定界)短语,除了使用保留字SIZE,表示整个发送项参加连接操作外,还可以在BY的后面使用字符值常量或字符型数据项。BY后面的字值常量或数据项内容称作定界符。在执行STRING语句时,发送项的内容以定界符为界,定界符左边的内容参加合并操作,定界符本身及其右方的内容舍去不用。如果发送项中没有与定界符相匹配的内容,整个发送项全参加合并操作。定界符可以是单字符,也可以是多字符的字符串 。
77 A PIC X(5) VALUE “ABCDE”。
77 B PIC X(5) VALUE “EFGHI”。
77 C PIC X(10) VALUE ALL“*”。
STRING A DELIMITED BY “C”,B DELIMITED BY “F“
INTO C。
则执行后,以的内容为
ABE*******。
POINTER短语
POINTER(指针)短语是针对接收项的,因为每个STRING语句只能有一个接收项,所以每个STRING语句只能有一个POINTER短语。
POINTER短语,用于规定接收项开始接收字符的起始位置。这个位置用接收项字符位置的相对号来表示,接收项左起第1字节的相对号是1,第2字节的相对号是2,。。。。。
77 P PIC 99.
MOVE 2 TO P.
STRING A B DELIMITED BY “C”
INTO C WITH POINTER P.
执行后,C的内容为
*ABEFGHI**
P的值变为9(2+7)。
OVERFLOW 短语
产生溢出的情况
1. 接收项已满,尚有未发送的字符。
2. 接收项已满,尚有未经处理的发送项
3. 指针短语中的指针变量值不合理,小于1或大于接收项长度。
STRING A B BY SIZE INTO C WITH POINTER P ON OVERFLOW GOTO ERR-OVER。
二.UNSTRING语句
UNSTRING语句与STRING语句作用相反,将字符串拆成若干字符串
规则:
如果发送项长度小于各接收项长度之和。
1. 某接收项未装满
2. 某接收项刚好装满,其右方各接收项没有接收内容。
对于1,系统将未接收项中尚未接收内容的字符位置填充空格,该接收项以右各接收项内容不变。
对于2,凡未已旧换新内容的项均维持原内容不变
UNSTRING A INTO B C。
DELIMITED 语句
定界符可以是单字符,也可以是多字符,但不可角STRING语句那样,采用保留字SIZE,必须是字符字值常量或字符型数据项。
如果发送项有多个字符或字符串与定界符匹配,则第一个匹配定界符以左的全部内容,作为一个发送字符串,发送给第一接收项,第二个匹配定界符以左,第一匹配定界符以右的内容,作为又一发送字符串,发送给第二接收项。若2个匹配定界符连在一起,相应接收项则接空格或0。
一个定界短语可有多个定界符,各定界符之间用OR连接,OR表示各定界符只要一个与发送项匹配成功,就确定发送。
UNSTRING A DELIMITED BY “,“ OR ”。“ INTO B C。
有时要以连续出现的同样字符作为定界符,在这种情况下,可在字符字值前冠以保留字ALL。
COUNT 短语
COUNT 短语是把发送字符串的长度记录在一个用户定义的数据项中
如A内容:ABCD//E5
B:PIC XXX
C:PIC XXX
D:PIC XXX
执行
UNSTRING A DELIMTED BY ‘/’
INTO B COUNT IN COUNT-B
C
D.
则B:ABC
C: (3个空格)
D:E5 (后有一个空格)
COUNT-B值为4。
DELIMITER短语
DELIMITER(定位符存贮)短语
UNSTRING A DELIMITER BY “,” or “;” or ALL “/”
INTO B DELIMITER IN DELIM-B
C DELIMITER IN DELIM-C.
当没有匹配发生时,该接收项对应的定界符存贮区被清成空格
POINTER短语
用来指示发送项的字符位置
此短语通常 在单接收项的情况下与DELIMITER短语联合使用。
77 DELIM PIC X.
77 PNTR PIC 99.
77 ACCEPT-AREA PIC X(80).
01 DATA-RECORD
03 DATA-ITEM PIC 9(6)
OCCURES 10 TIMES
INDEXED BY INDEX.
PROCEDURE DIVISION.
DISPLAY “PLEASE ENTER YOUR DATA.”
ACCEPT ACCEPT-AREA.
MOVE 1 TO PNTR.
MOVE LOW-VALUE TO DELIM.
PERFORM UNSTR-PROCESS
VARYING INDEX FROM 1 BY 1
UNTIL DELIM=”*”
UNSTR-PROCESS.
UNSTRING ACCEPT-AREA DELIMITED BY ALL SPACES or “*”
INTO DATA-ITEM(INDEX)
DELIMITER IN DELIM
WITH PROINTER PNTR.
TALLYING 短语
计算实际接收到了多少数据
MOVE ZERO TO TLY.
UNSTRIGN A DELIMITED BY ALL SPACE or “*”
INTO B C D E F
TRLLYING IN TLY.
假如A只发送了三个字符串,则TLY=3
本短语应在POINTER语句之后,而这2个短语又必须在DELIMITER和COUNT之后
OVERFLOW短语
溢出情况
1. 指针数值项值不合理,小于1或大于发送项长度。若不合理,不执行UNSTRING语句,控制转向溢出短语规定的命令语句
2. 当所有接收项已装满,但发送项尚有未和定界符茶杯的数据,或者尚有未被包含在发送字符串中的数据。此时先执行UNSTRING语句,而后控制转向溢出短语规定的命令语句
三.INSPECT语句
1> INSPECT/TALLYING语句
INSPECT A TALLYING TLY FOR ALL “A”
对指定字符串的所有出现进行计数,即数据项中每出现一个指定的字符串,计数器就加1
INSPECT A TALLYING TLY FOR LEADING “*”
对指定字符串作为前缀进行计数,计算数据项中从第一个字符开始连续出现多少指定的字符串。
INSPECT A TALLYING FLY FOR CHARACTERS
对所有出现的字符进行计数
INSPECT A TALLYING T1 FOR “.” AFTER “A”
T2 FOR “;” BEFORE “B”
2>INSPECT/REPLACING语句
INSPECT A REPLACING CHARACTERS BY SPACE BEFORE “*”.
用空格替代*前的全部字符
INSPECT A REPLACING ALL “AB” BY “XY”
ALL “CD” BY “AB”
用XY替代AB,AB替代CD
INSPECT A REPLACING LEADING SPACE BY ZERO BEFORE “**”
用0替代**之前的前缀为空格的前缀
如:A为_ _ 2_ 3**,替代后A为002_3**
A为1_2_3_**,替代后A不变
INSPECT A REPLACING FIRST “+” BY “-“ AFTER SPACE
用-替代空格后第一次出现+的
3>INSPECT/TALLYING/REPLACING语句
MOVE ZERO TO TLY.
INSPECT A TALLYING TLY FOR ALL “L”
REPLACING LEADING “A” BY “E” AFTER “L”.
评论: 1 | 引用: -2 | 查看次数: 2823
- 1
过客 [2008-01-28 01:08 PM]
从你这里学到了好东西,不好意思不顶一下,谢谢!!
- 1
发表评论