加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

COBOL中生僻语句的用法详解

(2007-12-21 22:42:28)
标签:

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,。。。。。
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.

当没有匹配发生时,该接收项对应的定界符存贮区被清成空格

 

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”.

 

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有