ACCEPT
从键盘或其他输入讑֤d数据?BR> ACCEPT A FROM DEV. 从DEVd数据到AQ也可以省略FROM DEVQ表CZ键盘d?BR> ACCEPT A FROM DATE/DAY/DAY-OF-WEEK/TIME.d日期Q表CZؓ6个字W,?90909Q?999q??日)?BR> d当前日期在年度(?位)中ؓW几天(?位)Q表CZؓ6个字W,?994q??日表CZؓ94091?BR> d当前星期几,表示?位字W?表示星期一Q?表示星期日?BR> d当前旉Q表CZؓ8位字W。精到毫秒。如下午2Q?1表示?4410000?/P>
DISPLAY
数据写入输备。如监视器(moniteQ,pȝ输出和操作员控制台QconsoleQ?BR> DISPLAY AAAAA BBBBB [UPON DEV] [WITH NO ADVANCING]
如果使用UPON选项Qdev要与special-namesD中的硬件名相关联?BR> 如果使用no advancing选项Q则输出最后一个字W后输出讑֤仍然保持原位Q下一条display语句q在该位|显C。否则可能到下一行显C?/P>
INITIALIZE
初始化数据,数字和数字编辑数据项初始化ؓ0Q其他初始化为空根{?/P>
INSPECT TALLYING
计算目中该字符串出现的ơ数?BR> INSPECT AA TALLYING BB FOR ALL “EE? 从AA中查找有多少个EEQ将个数写入BB?BR> INSPECT AA TALLYING BB FOR CHARACTERS BEFORE “E? 从AA中查找E前面有多个字符Q将个数写入BB?BR> INSPECT AA TALLYING BB FOR CHARACTERS AFTER “C?BEFORE “E? 从AA中查找C后面E前面有多个字符Q将个数写入BB?BR> INSPECT AA TALLYING BB FOR LEADING “E? 从AA中第一个字W开始查找有多少个EQ如果没有就l束操作Q有将个数写入BBQ直x有?BR> INSPECT AA TALLYING BB FOR LEADING “E?AFTER “C? 从AA中C后面开始查找有多少个EQ如果没有就l束操作Q有将个数写入BBQ直x有?BR>l合例子Q?BR> 77 CS PIC X(9) VALUE "REELWHEEL".
77 COUNT-0.
77 COUNT-1.
77 COUNT-2.
MOVE 0 TO COUNT-0,COUNT-1,COUNT-2.
INSPECT CS TALLYING
COUNT-0 FOR ALL "E",
COUNT-1 FOR LEADING "W" AFTER "L",
COUNT-2 FOR CHARACTERS.
E序首先判断的是字符"R",执行COUNT-0 FOR ALL "E"Q因为第一个字W不?E"Q所以程序{而执行COUNT-1 FOR LEADING "W" AFTER "L"Q也不符合要求,
于是E序执行COUNT-2 FOR CHARACTERSQCOUNT-2 =1。然后字W串往下一位,判断"E",执行COUNT-0 FOR ALL "E"Q符合要求,则COUNT-0=1?BR> 有了满条g的判断,则余下的判断不再执行Q字W串再往下一位,判断"E"Q则COUNT-0=2。接着判断"L",则COUNT-2 =2。以此类推,最后结果ؓCOUNT-0=4Q?BR> COUNT-1=1QCOUNT-2=4?BR>INSPECT REPLACING
用另一个字W串替换q个字符丌Ӏ?BR> q用上面的例子?BR> INSPECT CS REPLACING ALL "E" BY "Y". l果"RYYLWHYYL"
INSPECT CS REPLACING CHARACTERS BY "Z" AFTER "L". l果"REELZZZZZ"
INSPECT CS REPLACING LEADING "E" BY "Y". l果不变
INSPECT CS REPLACING LEADING "E" BY "Z" AFTER "H". l果"REELWHZZL"
INSPECT CS REPLACING FIRST "E" BY "I". l果"RIELWHEEL"
INSPECT CS REPLACING FIRST "EE" BY "00",ALL "WH" BY "TH",CHARACTERS BY SPACE. l果" 00 TH "
INSPECT CONVERTING
是INSPECT REPLACING的羃写?BR> INSPECT CS CONVERTING "EE" TO "00". 也可以加上BEFOREQAFTER?/P>
STRING
几个字W串合ƈ成一个字W串?BR> STRING A DELIMITED BY SPACEQ? Q? DELIMITED BY SIZE INTO C.假设A中的内容?HELLO",则结果是"HELLO !".
DELIMITED BY SPACE意思是到I格Q或到A的结或C的结,则合qA字符串结束?BR> DELIMITED BY SIZE意思是? Q?的结或C的结,则合q? Q?字符串结束?BR> STRING A INTO B POINTER C ON OVERFLOW PROC1 NOT ON OVERFLOW PROC2.
A字符串复制到B中由C开始的地址处。如果C于1或大于B的长度,或A的长度大于B中C到结֤的长度,则发?BR> OVERFLOW溢出Q执行PROC1?/P>
UNSTRING
一个字W串中的字符按照要求攑օ多个变量中?BR> UNSTRING AAA [DELIMITED BY [ALL] B [OR [ALL] C] ...] INTO { C [DELIMITER IN D] [COUNT IN E] } ...[WITH POINTER F] [TALLYING IN G] [ON OVERFLOW PROC1] [NOT ON OVERFLOW PROC2] [END-UNSTRING]
AAA中的字符攑օCQ如果还有其他变量,如C2Q则{C放满后放入C2?BR> DELIMITED BY和STRING中的作用一栗表C将AAA中到B为止的字W取出。如果有ORQ则表示到B或C字符为止的字W取出。如果有ALLQ则如果几个相同的B在一P则认为是一个B?BR> DELIMITER IN B攑օDQ知道是哪个字符为分隔符?BR> COUNT IN 实际复制到C中的字符数放入E中?BR> WITH POINTER 和STRIGN中一栗?BR> TALLYING IN 计算有几个接受项。访问一个新的接受项QG值加1?BR>例子Q?BR> 03 CITY PIC X(10).
O3 ZIP PIC X(10).
77 TEST PIC X(20).
MOVE "NEW YORK,NY 10017" TO TEST.
UNSTRING TEST DELIMITED BY "," INTO CITY,ZIP.
执行l果CITY值是NEW YORK.ZIP的值是NY 10017?/P>
逻辑和控制语?BR> IF (A [NOT] > B) {h?IF (A [NOT] GREATER THAN B)
IF (A [NOT] < B) {h?IF (A [NOT] LESS THAN B)
IF (A [NOT] = B) {h?IF (A [NOT] EQUAL TO B)
IF (A >= B) {h?IF (A GREATER THAN OR EQUAL TO B)
IF (A <= B) {h?IF (A LESS THAN OR EQUAL TO B)
IF A IS [NOT] NUMERIC 数字和可选符?BR> IF A IS [NOT] ALPHABETIC A~Z,a~z字符和空?BR> IF A IS [NOT] ALPHABETIC-LOWER a~z字符和空?BR> IF A IS [NOT] ALPHABETIC-UPPER A~Z字符和空?BR> IF A IS [NOT] CLASS-NAME SPECIAL-NAMES定义的字W集
例如QSPECIAL-NAMES.
CLASS MYDEFINE IS "12345+ABCDE-".
判断变量是否定义了数倹{这个变量是88层的Q且要与一个数据项兌?BR> 03 STATE PIC XX.
88 CON VALUES ARE "A","B","C".
IF CON ...
判断厂家定义q行开关的开/关状态?BR> SPECIAL-NAMES.
SWITCH-A ON STATUS IS A-ON ,OFF STATUS IS A-OFF.
IF A-ON...
若开兛_开位置Q则IF A-ONq回TRUE?/P>
IF A IS [NOT] POSITIVE 判断是否大于0
IF A IS [NOT] NEGATIVE 判断是否于0
IF A IS [NOT] ZERO 判断是否{于0
COBOL支持NOT ,AND ,OR 操作?/P>
PERFORM
q程调用Q但是不传递参数?BR> PERFORM PROC1 [THROUGH PROC2]
执行完PROC1再执行PROC2.没有THROUGH(THRU)只执行PROC1.
PERFORM PROC1 [THRU PROC2] N TIMES
执行PROC1[或者还有PROC2]Nơ?BR> PERFORM PROC1 [THRU PROC2] [WITH TEST BEFORE/AFTER] UNTIL A NOT EUQAL 0.
执行PROC1[或者还有PROC2]直到A不等?。WITH TEST BEFORE/AFTER指定在第一ơ执行之前还是之后判断条件。默认是BEFOREQ执行之前判断?BR> PERFORM PROC1 [THRU PROC2] [WITH TEST BEFORE/AFTER] VARYING A FROM B BY C UNTIL CONDITION1 [AFTER D FROM E BY F UNTIL CONDITION2].
相当于FOR循环Q将A的gB开始,以C为单位递增Q直到满CONDITION1。AFTER语句是一个嵌套的FOR 循环。VARYING是外循环QAFTER是内循环。AQB可以是烦引?/P>
q程也可以直接写入PERFORM中。但是THROUGH׃好用了。语法如?Q?BR> PERFORM q程语句 END-PERFORM.
PERFORM N TIMES q程语句 END-PERFORM.
PERFORM [WITH TEST BEFORE/AFTER] UNTIL CONDITION q程语句 END-PERFORM.
PERFORM [WITH TEST BEFORE/AFTER] VARYING A FROM B BY C UNTIL CONDITION1 q程语句 END-PERFORM.
IF语句
IF CONDITION THEN STATEMENTS1/NEXT SENTENCE ELSE STATEMENTS2 END-IF/NEXT SENTENCE/ENDIF
NEXT SENTENCE蟩出IF操作语句执行下一条语句?BR> IF语句中不要?句号?句号结束所有IF语句。要l束一个嵌套的IF语句Q可以用END-IF或者NEXT SENTENCE.?BR> IF A IF B END-IF ELSE C END-IF.或?BR> IF A IF B ELSE NEXT SENTENCE ELSE C END-IF.
EVALUATE
相当于SWITCH CASE语句?BR> EVALUATE A
WHEN B ...
WHEN 0 THRU 100 ...(FROM 0 TO 100)
WHEN OTHER ...
[END-EVALUATE]
首先得到A的结果,和WHEN语句的参数比较,如果和B相等Q就执行B后的操作Q执行完了不再执行后面的WHEN语句。如果不{就执行下一条WHEN语句。如果没有相{的执行WHEN OTHER语句?BR> EVALUATE A ALSO B
WHEN C ALSO D ...
WHEN E ALSO F ...
WHEN OTHER ...
对于有多个判断条件的Q要多个条g同时满。如上要C=A同时D=BQ才执行WHEN语句?/P>
CONTINUE
l箋执行下面的程序?/P>
GO TO
GO TO PROC1 [DEPENDING ON N] DEPENDING ON N蟩转到清单中的WN个PROC.
EXIT
一般ؓ最后一句话?/P>
STOP
STOP RUN l束E序?/P>
ALTER
ALTER PROC1 TO PROC2. 不懂什么意思,反正已经从标准中废除了这个语句?/P>
ENTER
使其他编E语a中的语句可以放进当前源程序中?BR> ENTER LANGUAGE-NAME [ROUTINE-NAME]
LANGUAGE 是厂家指定可以输入COBOL的Q何语aQ这个语句后面是其他~程语言的语句,然后要用ENTERCOBOL表示q回COBOL语言?BR> 如果无法其他语a的程序直接放入,可以用ROUTINE-NAME引用其他语言~写的程序?BR>
PICTURE
定义基本目的具体长度,格式Q数据类型。可以简写成PIC.
格式字符串最?0个字W,可以包含下列字符Q?BR> A 字母A-Z,a-z,I格
B 插入I格
P 标量字符Q代表字D中不显C的数点位|?BR> S 代数W号Q实际显C取决于目的USAGE
V 数点位|?BR> X M字符
Z 抑制前头?q{换成I字W?BR> 0 插入0
9 数字0~9
/ 插入/
, 插入,(逗号不能作ؓ字符串的最后一位,最后时逗号是分隔符)
?插入?BR> * 抑制前头?q{换成*
+ 正值插?Q负值插?
- 正值插入空|负值插?
$ 插入元?BR> CR 正值插入两个空|负值插入CR
DB 正值插入两个空|负值插入DB
例子Q?BR> 03 VAR PIC AAAAA. STATE变量长度?个字W,不能有数字,{h?3 STATE PIC A(5)?BR> 输入ASDFG ,昄ASDFG
03 VAR PIC XXXXX. FILLER变量长度?个Q意字W。等价于03 FILLER PIC X(5)?BR> 输入123AS Q?昄123AS
03 VAR PIC 99/XXX/9999 长度11Q输?5may2004,昄05/may/2004
03 VAR PIC 0ABXXX/9999 长度11Q输?5may2004,昄05 may/2004
03 VAR PIC 9(3) 长度3Q?~999之间?BR> 03 VAR PIC 9(4)V99 长度6Q?.00~9999.99之间?BR> 03 VAR PIC S9(5)V99 长度7Q?99999.99~99999.99之间?BR> 03 VAR PIC 9(6)PPP 长度6Q可以是1000Q?000Q?..,999999000。输?234Q显C?000?BR> 03 VAR PIC PPP999 长度3Q?.000001~0.000999之间。输?23Q显C?.000123?BR> 03 VAR PIC ZZZ.99Q输?00.50,昄100.50;输入-51.50,昄51.50;
输入0,昄.00.
03 VAR PIC $ZZZ.ZZ-Q输?00.50,昄$100.50;输入-51.50,昄$51.50-;
输入0,昄
03 VAR PIC $***,***.99CRQ输?000,昄$**1000.00;输入-1000,昄$**1000.00CR;
输入0,昄$***,***.00;输入51.5,昄$***,*51.50
03 VAR PIC $$$,$$$.99Q输?00.50,昄$100.50;输入-100.50,昄$100.50;
输入0.777,昄$.77;输入0,昄$.00
03 VAR PIC $.$$$Q输?.00,昄$.00;输入0.65,昄$.65;
输入0,昄$.00;
03 VAR PIC $--Q输?7.7,昄$17;输入-17.7,昄$-17;
输入-5,昄$-5
03 VAR PIC $999.99+Q输?00.50,昄$100.50+;输入-100.50,昄$100.50-;
03 VAR PIC 9(3)B9(3)Q输?5,昄000 055;输入1000.78,昄001 000;
USAGE 表示基本或组数据的类型。有BINARY,COMPUTATIONAL(COMP),DISPLAY,INDEX,PACKED-DECIMAL.
JUSTIFIED
03 VAR1 PIC X(5) JUSTIFIED RIGHT.
03 VAR2 PIC X(5).
输入XYZQVAR1昄的是" XYZ",VAR2昄的是"XYZ "?/P>
BLANK WHEN ZERO
03 VAR PIC $999,999.99 BLANK WHEN ZERO .
当字Dgؓ0Q这个项目设|ؓ全部I格?/P>
VALUE
定义的时候就赋倹{?BR> 03 VAR PIC X(5) VALUE "ABCDE".
01 VAR VALUE ALL SPACES.
03 VAR1 PIC XXX.
03 VAR2 PIC XX.
术语句
COBOL中操作符执行序为:取正(+)、取?-)最高Q指数操?**)其次Q乘(*)、除(/)再其ơ,?+)、减(-)最后?BR>ROUNDED 舍入操作?BR> 77 A PIC 9V9 VALUE 9.1.
77 B PIC 9.
ADD 0.5 TO A GIVING B ON SIZE ERROR GO TO PROC1.
ADD 0.5 TO A GIVING B ROUNDED ON SIZE ERROR GO TO PROC2.
END-ADD.
ON SIZE ERROR 是当语句出现错误时执行的。本例中W一句话执行没有错误Q所以ON SIZE ERROR
不执行PROC1.W二句话Q当0.5加上9.1得到9.6Q因为有ROUNDED,所以执行舍入操作,得到10。而B只有1位数字,所以发生错误,执行ON SIZE ERROR操作Q蟩转执行PROC2。?
CORRESPONDING(CORR) 数据同名时~写多条语句。ADD和SUBSTRACT有此选项?BR> 01 A .
03 B.
05 B1 PIC 999V99.
05 B1 PIC 999V99.
05 B1 PIC 999V99.
03 C.
05 B1 PIC 999V99.
05 B1 PIC 999V99.
05 B1 PIC 999V99.
则语句ADD CORR B TO C.相当于执行了下面3条语句?BR> ADD B1 OF B TO B1 OF C.
ADD B2 OF B TO B2 OF C.
ADD B3 OF B TO B3 OF C.
l项目不一定要格式相同。一个组目中的内容在另一个组目中可以没有,数据w序也无关紧要。只是严格按照数据项名称对应?BR> ADD A,B GIVING C. END-ADD. A,B相加攑օC?BR> SUBTRACT A,B FROM C。END-SUBTRACT. 从C中减去A,B.
MULTIPLY A BY B GIVING C. END-MULTIPLY. A,B怹攑օC?BR> DIVIDE A INTO B GIVING C. END-DIVIDE. B除于A的结果放入C.
DIVIDE A BY B GIVING C. END-DIVIDE. A除于B的结果放入C.
DIVIDE A BY B GIVING C REMAINDER D. A除于B的商攑օCQ余数放入D.
D=A-B*C.
77 C PIC S99V9.
77 D PIC S99V9.
DIVIDE 3 INTO 7 GIVING C REMAINDER D.
C的gؓ2.3QD?.1?D=7-3*2.3)
COMPUTE
除了取余操作要用DIVIDE外,其他操作都可以用此语句。本语句求g个算术表辑ּQƈ结果存攑֜一个或几个变量中?BR>COMPUTE A ROUNDED,B = X*Y/(N+M)+Z. X*Y/(N+M)+Z的结果存攑֜B中,然后舍入后放入A中?/P>
MOVE
MOVE A TO B.
也可以用CORR选项?BR> MOVE CORR A TO B.