﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-superwei-文章分类-COBOL</title><link>http://www.blogjava.net/superwei/category/4333.html</link><description /><language>zh-cn</language><lastBuildDate>Wed, 28 Feb 2007 07:42:52 GMT</lastBuildDate><pubDate>Wed, 28 Feb 2007 07:42:52 GMT</pubDate><ttl>60</ttl><item><title>COBOL 教程 </title><link>http://www.blogjava.net/superwei/articles/17637.html</link><dc:creator>小辞猬</dc:creator><author>小辞猬</author><pubDate>Tue, 01 Nov 2005 01:07:00 GMT</pubDate><guid>http://www.blogjava.net/superwei/articles/17637.html</guid><wfw:comment>http://www.blogjava.net/superwei/comments/17637.html</wfw:comment><comments>http://www.blogjava.net/superwei/articles/17637.html#Feedback</comments><slash:comments>6</slash:comments><wfw:commentRss>http://www.blogjava.net/superwei/comments/commentRss/17637.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/superwei/services/trackbacks/17637.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: COBOL 教程 - -Tag： COBOL &nbsp;&nbsp; 教程 &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbs...&nbsp;&nbsp;<a href='http://www.blogjava.net/superwei/articles/17637.html'>阅读全文</a><img src ="http://www.blogjava.net/superwei/aggbug/17637.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/superwei/" target="_blank">小辞猬</a> 2005-11-01 09:07 <a href="http://www.blogjava.net/superwei/articles/17637.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>COBOL程序格式 </title><link>http://www.blogjava.net/superwei/articles/17510.html</link><dc:creator>小辞猬</dc:creator><author>小辞猬</author><pubDate>Mon, 31 Oct 2005 03:04:00 GMT</pubDate><guid>http://www.blogjava.net/superwei/articles/17510.html</guid><wfw:comment>http://www.blogjava.net/superwei/comments/17510.html</wfw:comment><comments>http://www.blogjava.net/superwei/articles/17510.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/superwei/comments/commentRss/17510.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/superwei/services/trackbacks/17510.html</trackback:ping><description><![CDATA[cobol源程序的格式如下：<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;每行开头有6个字符的序号区。可以输入000010，000020等表示行，也可以不输。<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;序号区后面是一个字符（第7位）的指示符区，如第一行所示。可以用*和/表示注释，_表示续行，D表示调试。<BR>&nbsp;&nbsp;&nbsp;&nbsp; 指示符区后面是4个字符（8~11位）的A区。可以放入部，节，段标题，段名，层指示符和层号01与77，<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 关键字DECLARATIVES和END DECLARATIVES,程序结束标题。<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A区后面（12位以后）是语句体，称为B区。过程部的语句必须从B区开始。B区宽度通常为72或80个字符。<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 本例是70个字符。<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;空行的每个区都是空格<BR><BR>标识部（2~4行），PROGRAM-ID段包含程序名，是每个程序都必须的。AUTHOR等其他段是可有可无的。<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR>环境部（5~15行），提供与程序外部有关的项目，具体地说，就是列出程序所用的文件。如果不需要可以省略。<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 环境部有配置节（6~10行）和输入输出节（11~15行）。<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 第7行表示编译程序的计算机。如果指定WITH DEBUGGING MODE就编译调试行。<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 第8行表示程序运行的计算机。<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 第9，10行包含一组指定输出样式。这里是标准输出，可以自定义。<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 输入输出节只用于文件。<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 第13到15行表示如果程序使用文件，则这个段对每个文件包含一个项目。<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 文件控制项目的格式取决于文&nbsp; 件的描述类型。<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR>数据部（16~22行），提供程序变量的存放位置，对不同的数据类型分成不同的节：文件数据（File Section）、<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 静态数据（Working-Storage Section）、参数（Linkage Section）、通信（Communication Section）、<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;报表（Report Section）。<BR>&nbsp;&nbsp;&nbsp;&nbsp;文件节（18~21行），每个文件描述中包含文件所含纪录的定义，文件节中的数据或从文件读取，<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 或由写文件的程序产生。<BR>&nbsp;&nbsp;&nbsp;&nbsp;第22行表示工作存储节，这节包含程序所需的临时结果和初始化静态数据的数据。<BR>&nbsp;&nbsp;&nbsp; 参数（Linkage Section）包含调用程序传递的数据（其他语言中称为参数）。<BR>&nbsp;&nbsp;&nbsp;&nbsp;通信（Communication Section）,处理COBOL程序和通信设备之间的消息。<BR>&nbsp;&nbsp;&nbsp;&nbsp;报表（Report Section），报表节实现COBOL报告编写工具系统所需的数据。<BR>&nbsp;&nbsp;&nbsp; &nbsp;第20，21行的PIC是PICTURE的缩写，表示定义数据格式。<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; X(12)表示12个字符的字符串，9(09)表示9位的整数。<BR>可以将基本项目组成层次结构，称为组数据项或组。<BR>COBOL程序中的数据项的定义从层号开始，01层是最高层，49层是最低层。<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 77层项目用于某个组的数据项，如程序中的临时变量。<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 66层是为特殊描述符项目保留的，可以更名现有的数据项或组，或以原定义未允许的方式组合。<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 88层是对特殊数据项目条件名保留的<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 如：<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 03 STATE PIC XX.<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 88 NEW-ENGLAND VALUES ARE "1","2","3","4","5".<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; IF NEW-ENGLAND ... then do something<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR>过程部（23~30行），包含构成程序的过程性语句。<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 带DECLARATIVES的过程部。有些程序用特殊的USE语句表示遇到特殊条件时要执行的过程，<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 如发生I/O错误时。<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; USE语句组合在一起，放在过程部开头，由关键字DECLARATIVES和END DECLARATIVES限定。<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 第24行相当于定义了一个名字叫ACAB030100-PROC（）的函数。<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 第25，29行定义了标志，可以用GO TO 语句跳转到这个地方，执行下面的语句。<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 第26行在屏幕上打印，相当于printf("ACAB030100-START");<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 第27行是调用ACAB030100-PROC（）函数。<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR>cobol程序的要求：必须以英文句号.结束部标题、节标题、段名、项目和语句。<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 句号为小数点时，两边都要有数字。<BR><img src ="http://www.blogjava.net/superwei/aggbug/17510.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/superwei/" target="_blank">小辞猬</a> 2005-10-31 11:04 <a href="http://www.blogjava.net/superwei/articles/17510.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>COBOL语法和文法(2)</title><link>http://www.blogjava.net/superwei/articles/17509.html</link><dc:creator>小辞猬</dc:creator><author>小辞猬</author><pubDate>Mon, 31 Oct 2005 03:03:00 GMT</pubDate><guid>http://www.blogjava.net/superwei/articles/17509.html</guid><wfw:comment>http://www.blogjava.net/superwei/comments/17509.html</wfw:comment><comments>http://www.blogjava.net/superwei/articles/17509.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/superwei/comments/commentRss/17509.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/superwei/services/trackbacks/17509.html</trackback:ping><description><![CDATA[<SPAN id=ArticleContent1_ArticleContent1_lblContent>&nbsp;
<P>ACCEPT<BR>&nbsp;&nbsp;&nbsp; 从键盘或其他输入设备读取数据。<BR>&nbsp;&nbsp;&nbsp; ACCEPT A FROM DEV.&nbsp;&nbsp;&nbsp; 从DEV读取数据到A，也可以省略FROM DEV，表示从键盘读取。<BR>&nbsp;&nbsp;&nbsp; ACCEPT A FROM DATE/DAY/DAY-OF-WEEK/TIME.读取日期，表示为6个字符，如990909（1999年9月9日）。<BR>&nbsp;&nbsp;&nbsp; 读取当前日期在年度（前2位）中为第几天（后3位），表示为6个字符，如1994年4月1日表示为94091。<BR>&nbsp;&nbsp;&nbsp; 读取当前星期几，表示为1位字符。1表示星期一，7表示星期日。<BR>&nbsp;&nbsp;&nbsp; 读取当前时间，表示为8位字符。精确到毫秒。如下午2：41表示为14410000。</P>
<P>DISPLAY<BR>&nbsp;&nbsp;&nbsp; 将数据写入输出设备。如监视器（monite），系统输出流和操作员控制台（console）。<BR>&nbsp;&nbsp;&nbsp; DISPLAY AAAAA BBBBB [UPON DEV] [WITH NO ADVANCING]<BR>&nbsp;&nbsp;&nbsp; 如果使用UPON选项，dev要与special-names段中的硬件名相关联。<BR>&nbsp;&nbsp;&nbsp; 如果使用no advancing选项，则输出最后一个字符后输出设备仍然保持原位，使下一条display语句还在该位置显示。否则可能到下一行显示。</P>
<P>INITIALIZE<BR>&nbsp;&nbsp;&nbsp; 初始化数据，数字和数字编辑数据项初始化为0，其他初始化为空格。</P>
<P>INSPECT TALLYING<BR>&nbsp;&nbsp;&nbsp; 计算项目中该字符串出现的次数。<BR>&nbsp;&nbsp;&nbsp; INSPECT AA TALLYING BB FOR ALL “EE”.&nbsp; 从AA中查找有多少个EE，将个数写入BB。<BR>&nbsp;&nbsp;&nbsp; INSPECT AA TALLYING BB FOR CHARACTERS BEFORE “E”.&nbsp; 从AA中查找E前面有多少个字符，将个数写入BB。<BR>&nbsp;&nbsp;&nbsp; INSPECT AA TALLYING BB FOR CHARACTERS AFTER “C” BEFORE “E”.&nbsp; 从AA中查找C后面E前面有多少个字符，将个数写入BB。<BR>&nbsp;&nbsp;&nbsp; INSPECT AA TALLYING BB FOR LEADING “E”.&nbsp; 从AA中第一个字符开始查找有多少个E，如果没有就结束操作，有就将个数写入BB，直至没有。<BR>&nbsp;&nbsp;&nbsp; INSPECT AA TALLYING BB FOR LEADING “E” AFTER “C”.&nbsp; 从AA中C后面开始查找有多少个E，如果没有就结束操作，有就将个数写入BB，直至没有。<BR>组合例子：<BR>&nbsp;&nbsp;&nbsp; 77 CS PIC X(9) VALUE "REELWHEEL".<BR>&nbsp;&nbsp;&nbsp; 77 COUNT-0.<BR>&nbsp;&nbsp;&nbsp; 77 COUNT-1.<BR>&nbsp;&nbsp;&nbsp; 77 COUNT-2.<BR>&nbsp;&nbsp;&nbsp; MOVE 0 TO COUNT-0,COUNT-1,COUNT-2.<BR>&nbsp;&nbsp;&nbsp; INSPECT CS TALLYING<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; COUNT-0 FOR ALL "E",<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; COUNT-1 FOR LEADING "W" AFTER "L",<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; COUNT-2 FOR CHARACTERS.<BR>&nbsp;&nbsp;&nbsp; 程序首先判断的是字符"R",执行COUNT-0 FOR ALL "E"，因为第一个字符不是"E"，所以程序转而执行COUNT-1 FOR LEADING "W" AFTER "L"，也不符合要求，<BR>&nbsp;&nbsp;&nbsp; 于是程序执行COUNT-2 FOR CHARACTERS，COUNT-2 =1。然后字符串往下一位，判断"E",执行COUNT-0 FOR ALL "E"，符合要求，则COUNT-0=1。<BR>&nbsp;&nbsp;&nbsp; 有了满足条件的判断，则余下的判断不再执行，字符串再往下一位，判断"E"，则COUNT-0=2。接着判断"L",则COUNT-2 =2。以此类推，最后结果为COUNT-0=4，<BR>&nbsp;&nbsp;&nbsp; COUNT-1=1，COUNT-2=4。<BR>INSPECT REPLACING<BR>&nbsp;&nbsp;&nbsp; 用另一个字符串替换这个字符串。<BR>&nbsp;&nbsp;&nbsp; 还用上面的例子。<BR>&nbsp;&nbsp;&nbsp; INSPECT CS REPLACING ALL "E" BY "Y".&nbsp; 结果"RYYLWHYYL"<BR>&nbsp;&nbsp;&nbsp; INSPECT CS REPLACING CHARACTERS BY "Z" AFTER&nbsp; "L".&nbsp; 结果"REELZZZZZ"<BR>&nbsp;&nbsp;&nbsp; INSPECT CS REPLACING LEADING "E" BY "Y".&nbsp; 结果不变<BR>&nbsp;&nbsp;&nbsp; INSPECT CS REPLACING LEADING "E" BY "Z" AFTER&nbsp; "H".&nbsp; 结果"REELWHZZL"<BR>&nbsp;&nbsp;&nbsp; INSPECT CS REPLACING FIRST "E" BY "I".&nbsp; 结果"RIELWHEEL"<BR>&nbsp;&nbsp;&nbsp; INSPECT CS REPLACING FIRST "EE" BY "00",ALL "WH" BY "TH",CHARACTERS BY SPACE.&nbsp; 结果" 00 TH&nbsp;&nbsp; "<BR>INSPECT CONVERTING<BR>&nbsp;&nbsp;&nbsp; 就是INSPECT REPLACING的缩写。<BR>&nbsp;&nbsp;&nbsp; INSPECT CS CONVERTING "EE" TO "00". 也可以加上BEFORE，AFTER。</P>
<P>STRING<BR>&nbsp;&nbsp;&nbsp; 将几个字符串合并成一个字符串。<BR>&nbsp;&nbsp;&nbsp; STRING A DELIMITED BY SPACE，" ！" DELIMITED BY SIZE INTO C.假设A中的内容是"HELLO",则结果是"HELLO !".<BR>&nbsp;&nbsp;&nbsp; DELIMITED BY SPACE意思是碰到空格，或到A的结尾或C的结尾，则合并A字符串结束。<BR>&nbsp;&nbsp;&nbsp; DELIMITED BY SIZE意思是到" ！"的结尾或C的结尾，则合并" ！"字符串结束。<BR>&nbsp;&nbsp;&nbsp; STRING A INTO B POINTER C ON OVERFLOW PROC1 NOT ON OVERFLOW&nbsp; PROC2.<BR>&nbsp;&nbsp;&nbsp; 将A字符串复制到B中由C开始的地址处。如果C小于1或大于B的长度，或A的长度大于B中C到结尾处的长度，则发生<BR>&nbsp;&nbsp;&nbsp; OVERFLOW溢出，执行PROC1。</P>
<P>UNSTRING<BR>&nbsp;&nbsp;&nbsp; 将一个字符串中的字符按照要求放入多个变量中。<BR>&nbsp;&nbsp;&nbsp; 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]&nbsp; <BR>&nbsp;&nbsp;&nbsp; 将AAA中的字符放入C，如果还有其他变量，如C2，则等C放满后放入C2。<BR>&nbsp;&nbsp;&nbsp; DELIMITED BY和STRING中的作用一样。表示将AAA中到B为止的字符取出。如果有OR，则表示到B或C字符为止的字符取出。如果有ALL，则如果几个相同的B在一起，则认为是一个B。<BR>&nbsp;&nbsp;&nbsp; DELIMITER IN 将B放入D，知道是哪个字符为分隔符。<BR>&nbsp;&nbsp;&nbsp; COUNT IN 实际复制到C中的字符数放入E中。<BR>&nbsp;&nbsp;&nbsp; WITH POINTER 和STRIGN中一样。<BR>&nbsp;&nbsp;&nbsp; TALLYING IN 计算有几个接受项。访问一个新的接受项，G值加1。<BR>例子：<BR>&nbsp;&nbsp;&nbsp; 03 CITY PIC X(10).<BR>&nbsp;&nbsp;&nbsp; O3 ZIP&nbsp; PIC X(10).<BR>&nbsp;&nbsp;&nbsp; 77 TEST PIC X(20).<BR>&nbsp;&nbsp;&nbsp; MOVE "NEW YORK,NY 10017" TO TEST.<BR>&nbsp;&nbsp;&nbsp; UNSTRING TEST DELIMITED BY "," INTO CITY,ZIP.<BR>&nbsp;&nbsp;&nbsp; 执行结果CITY值是NEW YORK.ZIP的值是NY 10017。</P>
<P>逻辑和控制语句<BR>&nbsp;&nbsp;&nbsp; IF (A [NOT] &gt; B) 等价于 IF (A [NOT] GREATER THAN B)<BR>&nbsp;&nbsp;&nbsp; IF (A [NOT] &lt; B) 等价于 IF (A [NOT] LESS THAN B)<BR>&nbsp;&nbsp;&nbsp; IF (A [NOT] = B) 等价于 IF (A [NOT] EQUAL TO B)<BR>&nbsp;&nbsp;&nbsp; IF (A &gt;= B) 等价于 IF (A GREATER THAN OR EQUAL TO B)<BR>&nbsp;&nbsp;&nbsp; IF (A &lt;= B) 等价于 IF (A LESS THAN OR EQUAL TO B)</P>
<P>&nbsp;&nbsp;&nbsp; IF A IS [NOT] NUMERIC&nbsp;&nbsp;&nbsp; 数字和可选符号<BR>&nbsp;&nbsp;&nbsp; IF A IS [NOT] ALPHABETIC A~Z,a~z字符和空格<BR>&nbsp;&nbsp;&nbsp; IF A IS [NOT] ALPHABETIC-LOWER a~z字符和空格<BR>&nbsp;&nbsp;&nbsp; IF A IS [NOT] ALPHABETIC-UPPER A~Z字符和空格<BR>&nbsp;&nbsp;&nbsp; IF A IS [NOT] CLASS-NAME&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SPECIAL-NAMES定义的字符集<BR>&nbsp;&nbsp;&nbsp; 例如：SPECIAL-NAMES.<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CLASS MYDEFINE IS "12345+ABCDE-".</P>
<P>&nbsp;&nbsp;&nbsp; 判断变量是否定义了数值。这个变量是88层的，且要与一个数据项关联。<BR>&nbsp;&nbsp;&nbsp; 03 STATE PIC XX.<BR>&nbsp;&nbsp;&nbsp; 88 CON VALUES ARE "A","B","C".<BR>&nbsp;&nbsp;&nbsp; IF CON ...</P>
<P>&nbsp;&nbsp;&nbsp; 判断厂家定义运行开关的开/关状态。<BR>&nbsp;&nbsp;&nbsp; SPECIAL-NAMES.<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SWITCH-A ON STATUS IS A-ON ,OFF STATUS IS A-OFF.<BR>&nbsp;&nbsp;&nbsp; IF A-ON...<BR>&nbsp;&nbsp;&nbsp; 若开关在开位置，则IF A-ON返回TRUE。</P>
<P>&nbsp;&nbsp;&nbsp; IF A IS [NOT] POSITIVE&nbsp; 判断是否大于0<BR>&nbsp;&nbsp;&nbsp; IF A IS [NOT] NEGATIVE&nbsp; 判断是否小于0<BR>&nbsp;&nbsp;&nbsp; IF A IS [NOT] ZERO&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 判断是否等于0</P>
<P>&nbsp;&nbsp;&nbsp; COBOL支持NOT ,AND ,OR 操作。</P>
<P>PERFORM<BR>&nbsp;&nbsp;&nbsp; 过程调用，但是不传递参数。<BR>&nbsp; PERFORM PROC1 [THROUGH PROC2]&nbsp; <BR>&nbsp;&nbsp;&nbsp; 执行完PROC1再执行PROC2.没有THROUGH(THRU)就只执行PROC1.<BR>&nbsp; PERFORM PROC1 [THRU PROC2] N TIMES<BR>&nbsp;&nbsp;&nbsp; 执行PROC1[或者还有PROC2]N次。<BR>&nbsp; PERFORM PROC1 [THRU PROC2] [WITH TEST BEFORE/AFTER] UNTIL A NOT EUQAL 0.<BR>&nbsp;&nbsp;&nbsp; 执行PROC1[或者还有PROC2]直到A不等于0。WITH TEST BEFORE/AFTER指定在第一次执行之前还是之后判断条件。默认是BEFORE，执行之前判断。<BR>&nbsp; PERFORM PROC1 [THRU PROC2] [WITH TEST BEFORE/AFTER] VARYING A FROM B BY C UNTIL CONDITION1 [AFTER D FROM E BY F UNTIL CONDITION2].<BR>&nbsp;&nbsp;&nbsp; 相当于FOR循环，将A的值从B开始，以C为单位递增，直到满足CONDITION1。AFTER语句是一个嵌套的FOR 循环。VARYING是外循环，AFTER是内循环。A，B可以是索引。</P>
<P>&nbsp;&nbsp;&nbsp; 过程也可以直接写入PERFORM中。但是THROUGH就不好用了。语法如下 ：<BR>&nbsp; PERFORM 过程语句 END-PERFORM.<BR>&nbsp; PERFORM N TIMES 过程语句 END-PERFORM.<BR>&nbsp; PERFORM [WITH TEST BEFORE/AFTER] UNTIL CONDITION 过程语句 END-PERFORM.<BR>&nbsp; PERFORM [WITH TEST BEFORE/AFTER] VARYING A FROM B BY C UNTIL CONDITION1 过程语句 END-PERFORM.</P>
<P>IF语句<BR>&nbsp; IF CONDITION THEN STATEMENTS1/NEXT SENTENCE ELSE STATEMENTS2 END-IF/NEXT SENTENCE/ENDIF<BR>&nbsp;&nbsp;&nbsp; NEXT SENTENCE将跳出IF操作语句执行下一条语句。<BR>&nbsp;&nbsp;&nbsp; IF语句中不要使用.句号。.句号将结束所有IF语句。要结束一个嵌套的IF语句，可以使用END-IF或者NEXT SENTENCE.如<BR>&nbsp;&nbsp;&nbsp; IF A IF B END-IF ELSE C END-IF.或者<BR>&nbsp;&nbsp;&nbsp; IF A IF B ELSE NEXT SENTENCE ELSE C END-IF.</P>
<P>EVALUATE<BR>&nbsp;&nbsp;&nbsp; 相当于SWITCH CASE语句。<BR>&nbsp;&nbsp;&nbsp; EVALUATE A<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WHEN B ...<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WHEN 0 THRU 100 ...(FROM 0 TO 100)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WHEN OTHER ...<BR>&nbsp;&nbsp;&nbsp; [END-EVALUATE]<BR>&nbsp;&nbsp;&nbsp; 首先得到A的结果，和WHEN语句的参数比较，如果和B相等，就执行B后的操作，执行完了不再执行后面的WHEN语句。如果不等就执行下一条WHEN语句。如果没有相等的就执行WHEN OTHER语句。<BR>&nbsp;&nbsp;&nbsp; EVALUATE A ALSO B<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WHEN C ALSO D ...<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WHEN E ALSO F ...<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WHEN OTHER ...<BR>&nbsp;&nbsp;&nbsp; 对于有多个判断条件的，要多个条件同时满足。如上要C=A同时D=B，才执行WHEN语句。</P>
<P>CONTINUE<BR>&nbsp;&nbsp;&nbsp; 继续执行下面的程序。</P>
<P>GO TO <BR>&nbsp;&nbsp;&nbsp; GO TO PROC1 [DEPENDING ON N] DEPENDING ON N将跳转到清单中的第N个PROC.</P>
<P>EXIT<BR>&nbsp;&nbsp;&nbsp; 一般为最后一句话。</P>
<P>STOP<BR>&nbsp;&nbsp;&nbsp; STOP RUN&nbsp; 结束程序。</P>
<P>ALTER <BR>&nbsp;&nbsp;&nbsp; ALTER PROC1 TO PROC2. 不懂什么意思，反正已经从标准中废除了这个语句。</P>
<P>ENTER<BR>&nbsp;&nbsp;&nbsp; 使其他编程语言中的语句可以放进当前源程序中。<BR>&nbsp;&nbsp;&nbsp; ENTER LANGUAGE-NAME [ROUTINE-NAME]<BR>&nbsp;&nbsp;&nbsp; LANGUAGE 是厂家指定可以输入COBOL的任何语言，这个语句后面是其他编程语言的语句，然后要用ENTERCOBOL表示返回COBOL语言。<BR>&nbsp;&nbsp;&nbsp; 如果无法将其他语言的程序直接放入，可以用ROUTINE-NAME引用其他语言编写的程序。<BR><BR></P></SPAN><img src ="http://www.blogjava.net/superwei/aggbug/17509.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/superwei/" target="_blank">小辞猬</a> 2005-10-31 11:03 <a href="http://www.blogjava.net/superwei/articles/17509.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>COBOL语法和文法(1)</title><link>http://www.blogjava.net/superwei/articles/17508.html</link><dc:creator>小辞猬</dc:creator><author>小辞猬</author><pubDate>Mon, 31 Oct 2005 03:01:00 GMT</pubDate><guid>http://www.blogjava.net/superwei/articles/17508.html</guid><wfw:comment>http://www.blogjava.net/superwei/comments/17508.html</wfw:comment><comments>http://www.blogjava.net/superwei/articles/17508.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/superwei/comments/commentRss/17508.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/superwei/services/trackbacks/17508.html</trackback:ping><description><![CDATA[<SPAN id=ArticleContent1_ArticleContent1_lblContent> REDEFINES<BR>    可以用不同的变量描述同一内存。<BR>    01 PART_RECODE USAGE DISPLAY<BR>      03 PART-TYPE PICTURE...<BR>      03 PART_TYPE_A.<BR>        05 PART_NUMBER PICTURE...<BR>        05 PART_COST PICTURE...<BR>      03 PART_TYPE_B REDEFINES PART_TYPE_A.<BR>        05 UPC_CODE PICTURE...<BR>      03 PART_TYPE_C REDEFINES PART_TYPE_A.<BR>        05 ISBN PICTURE...<BR>    根据PART_TYPE决定用PART_TYPE_A还是PART_TYPE_B还是PART_TYPE_C。<BR>    规则：<BR>        PART_TYPE_B和PART_TYPE_C长度不能大于PART_TYPE_A。<BR>        数据项不能有VALUE。<BR>        01层不能用REDEFINES.<BR>        PART_TYPE_B和PART_TYPE_C中不能有OCCURS.
<P>PICTURE<BR>    定义基本项目的具体长度，格式，数据类型。可以简写成PIC.<BR>    格式字符串最多30个字符，可以包含下列字符：<BR>    A  字母A-Z,a-z,空格<BR>    B  插入空格<BR>    P  标量字符，代表字段中不显示的小数点位置<BR>    S  代数符号，实际显示取决于项目的USAGE<BR>    V  小数点位置<BR>    X  任何字符<BR>    Z  抑制前头的0并转换成空字符<BR>    0  插入0<BR>    9  数字0~9<BR>    /  插入/<BR>    ,  插入,(逗号不能作为字符串的最后一位，最后时逗号是分隔符)<BR>    。 插入。<BR>    *  抑制前头的0并转换成*<BR>    +  正值插入+，负值插入-<BR>    -  正值插入空格，负值插入-<BR>    $  插入美元号<BR>    CR 正值插入两个空格，负值插入CR<BR>    DB 正值插入两个空格，负值插入DB<BR>例子：<BR>    03 VAR PIC AAAAA.    STATE变量长度为5个字符，不能有数字，等价于03 STATE PIC A(5)。<BR>   输入ASDFG ,显示ASDFG<BR>    03 VAR PIC XXXXX.   FILLER变量长度为5个任意字符。等价于03 FILLER PIC X(5)。<BR>   输入123AS ， 显示123AS<BR>    03 VAR PIC 99/XXX/9999 长度11，输入05may2004,显示05/may/2004<BR>    03 VAR PIC 0ABXXX/9999 长度11，输入05may2004,显示05 may/2004<BR>    03 VAR PIC 9(3) 长度3，0~999之间。<BR>    03 VAR PIC 9(4)V99 长度6，0.00~9999.99之间。<BR>    03 VAR PIC S9(5)V99 长度7，-99999.99~99999.99之间。<BR>    03 VAR PIC 9(6)PPP 长度6，可以是1000，2000，...,999999000。输入1234，显示1000。<BR>    03 VAR PIC PPP999 长度3，0.000001~0.000999之间。输入123，显示0.000123。<BR>    03 VAR PIC ZZZ.99，输入100.50,显示100.50;输入-51.50,显示51.50;<BR>            输入0,显示.00.<BR>    03 VAR PIC $ZZZ.ZZ-，输入100.50,显示$100.50;输入-51.50,显示$51.50-;<BR>            输入0,显示<BR>    03 VAR PIC $***,***.99CR，输入1000,显示$**1000.00;输入-1000,显示$**1000.00CR;<BR>            输入0,显示$***,***.00;输入51.5,显示$***,*51.50<BR>    03 VAR PIC $$$,$$$.99，输入100.50,显示$100.50;输入-100.50,显示$100.50;<BR>            输入0.777,显示$.77;输入0,显示$.00<BR>    03 VAR PIC $.$$$，输入1.00,显示$.00;输入0.65,显示$.65;<BR>            输入0,显示$.00;<BR>    03 VAR PIC $--，输入17.7,显示$17;输入-17.7,显示$-17;<BR>            输入-5,显示$-5<BR>    03 VAR PIC $999.99+，输入100.50,显示$100.50+;输入-100.50,显示$100.50-;<BR>    03 VAR PIC 9(3)B9(3)，输入55,显示000 055;输入1000.78,显示001 000;</P>
<P>USAGE 表示基本或组数据的类型。有BINARY,COMPUTATIONAL(COMP),DISPLAY,INDEX,PACKED-DECIMAL.</P>
<P>JUSTIFIED<BR>    03 VAR1 PIC X(5) JUSTIFIED RIGHT.<BR>    03 VAR2 PIC X(5).<BR>    输入XYZ，VAR1显示的是"  XYZ",VAR2显示的是"XYZ  "。</P>
<P>BLANK WHEN ZERO<BR>    03 VAR PIC $999,999.99 BLANK WHEN ZERO .<BR>    当字段值为0，这个项目设置为全部空格。</P>
<P>VALUE<BR>    定义的时候就赋值。<BR>    03 VAR PIC X(5) VALUE "ABCDE".<BR>    01 VAR VALUE ALL SPACES.<BR>      03 VAR1 PIC XXX.<BR>      03 VAR2 PIC XX.</P>
<P>算术语句<BR>    COBOL中操作符执行顺序为：取正(+)、取负(-)最高级，指数操作(**)其次，乘(*)、除(/)再其次，加(+)、减(-)最后。<BR>ROUNDED   舍入操作。<BR>    77 A PIC 9V9 VALUE 9.1.<BR>    77 B PIC 9.<BR>      ADD 0.5 TO A GIVING B ON SIZE ERROR GO TO PROC1.<BR>      ADD 0.5 TO A GIVING B ROUNDED ON SIZE ERROR GO TO PROC2.<BR>      END-ADD.<BR>ON SIZE ERROR 是当语句出现错误时执行的。本例中第一句话执行没有错误，所以ON SIZE ERROR<BR>不执行PROC1.第二句话，当0.5加上9.1得到9.6，因为有ROUNDED,所以执行舍入操作，得到10。而B只有1位数字，所以发生错误，执行ON SIZE ERROR操作，跳转执行PROC2。  <BR>CORRESPONDING(CORR)    数据项同名时编写多条语句。ADD和SUBSTRACT有此选项。<BR>    01 A .<BR>      03 B.<BR>        05 B1 PIC 999V99.<BR>        05 B1 PIC 999V99.<BR>        05 B1 PIC 999V99.<BR>      03 C.<BR>        05 B1 PIC 999V99.<BR>        05 B1 PIC 999V99.<BR>        05 B1 PIC 999V99.<BR>则语句ADD CORR B TO C.相当于执行了下面3条语句。<BR>    ADD B1 OF B TO B1 OF C.<BR>    ADD B2 OF B TO B2 OF C.<BR>    ADD B3 OF B TO B3 OF C.<BR>组项目不一定要格式相同。一个组项目中的内容在另一个组项目中可以没有，数据项顺序也无关紧要。只是严格按照数据项名称对应。<BR>    ADD A,B GIVING C. END-ADD.              将A,B相加放入C。<BR>    SUBTRACT A,B FROM C。END-SUBTRACT.      从C中减去A,B.<BR>    MULTIPLY A BY B GIVING C. END-MULTIPLY. 将A,B相乘放入C。<BR>    DIVIDE A INTO B GIVING C. END-DIVIDE.   将B除于A的结果放入C.<BR>    DIVIDE A BY B GIVING C. END-DIVIDE.     将A除于B的结果放入C.<BR>    DIVIDE A BY B GIVING C REMAINDER D.     将A除于B的商放入C，余数放入D.<BR>    D=A-B*C.<BR>    77 C PIC S99V9.<BR>    77 D PIC S99V9.<BR>    DIVIDE 3 INTO 7 GIVING C REMAINDER D.<BR>    C的值为2.3，D为0.1。(D=7-3*2.3)</P>
<P>COMPUTE<BR>    除了取余操作要用DIVIDE外，其他操作都可以用此语句。本语句求值一个算术表达式，并将结果存放在一个或几个变量中。<BR>COMPUTE  A ROUNDED,B  = X*Y/(N+M)+Z. 将X*Y/(N+M)+Z的结果存放在B中，然后舍入后放入A中。</P>
<P>MOVE <BR>    MOVE A TO B.<BR>    也可以用CORR选项。<BR>    MOVE CORR A TO B.<BR></P></SPAN><img src ="http://www.blogjava.net/superwei/aggbug/17508.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/superwei/" target="_blank">小辞猬</a> 2005-10-31 11:01 <a href="http://www.blogjava.net/superwei/articles/17508.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>