标签:
it/科技 |
分类: COBOL与ORACLE |
|
字符处理 一.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,。。。。。 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. 当没有匹配发生时,该接收项对应的定界符存贮区被清成空格 |
|
|
|
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之后 |
|
|
|
三.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”. |

加载中…