COBOL语法和文法(2) 
 
 
ACCEPT
    从键盘或其他输入设备读取数据。
    ACCEPT A FROM DEV.    从DEV读取数据到A,也可以省略FROM DEV,表示从键盘读取。
    ACCEPT A FROM DATE/DAY/DAY-OF-WEEK/TIME.读取日期,表示为6个字符,如990909(1999年9月9日)。
    读取当前日期在年度(前2位)中为第几天(后3位),表示为6个字符,如1994年4月1日表示为94091。
    读取当前星期几,表示为1位字符。1表示星期一,7表示星期日。
    读取当前时间,表示为8位字符。精确到毫秒。如下午2:41表示为14410000。

DISPLAY
    将数据写入输出设备。如监视器(monite),系统输出流和操作员控制台(console)。
    DISPLAY AAAAA BBBBB [UPON DEV] [WITH NO ADVANCING]
    如果使用UPON选项,dev要与special-names段中的硬件名相关联。
    如果使用no advancing选项,则输出最后一个字符后输出设备仍然保持原位,使下一条display语句还在该位置显示。否则可能到下一行显示。

INITIALIZE
    初始化数据,数字和数字编辑数据项初始化为0,其他初始化为空格。

INSPECT TALLYING
    计算项目中该字符串出现的次数。
    INSPECT AA TALLYING BB FOR ALL “EE”.  从AA中查找有多少个EE,将个数写入BB。
    INSPECT AA TALLYING BB FOR CHARACTERS BEFORE “E”.  从AA中查找E前面有多少个字符,将个数写入BB。
    INSPECT AA TALLYING BB FOR CHARACTERS AFTER “C” BEFORE “E”.  从AA中查找C后面E前面有多少个字符,将个数写入BB。
    INSPECT AA TALLYING BB FOR LEADING “E”.  从AA中第一个字符开始查找有多少个E,如果没有就结束操作,有就将个数写入BB,直至没有。
    INSPECT AA TALLYING BB FOR LEADING “E” AFTER “C”.  从AA中C后面开始查找有多少个E,如果没有就结束操作,有就将个数写入BB,直至没有。
组合例子:
    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.
    程序首先判断的是字符"R",执行COUNT-0 FOR ALL "E",因为第一个字符不是"E",所以程序转而执行COUNT-1 FOR LEADING "W" AFTER "L",也不符合要求,
    于是程序执行COUNT-2 FOR CHARACTERS,COUNT-2 =1。然后字符串往下一位,判断"E",执行COUNT-0 FOR ALL "E",符合要求,则COUNT-0=1。
    有了满足条件的判断,则余下的判断不再执行,字符串再往下一位,判断"E",则COUNT-0=2。接着判断"L",则COUNT-2 =2。以此类推,最后结果为COUNT-0=4,
    COUNT-1=1,COUNT-2=4。
INSPECT REPLACING
    用另一个字符串替换这个字符串。
    还用上面的例子。
    INSPECT CS REPLACING ALL "E" BY "Y".  结果"RYYLWHYYL"
    INSPECT CS REPLACING CHARACTERS BY "Z" AFTER  "L".  结果"REELZZZZZ"
    INSPECT CS REPLACING LEADING "E" BY "Y".  结果不变
    INSPECT CS REPLACING LEADING "E" BY "Z" AFTER  "H".  结果"REELWHZZL"
    INSPECT CS REPLACING FIRST "E" BY "I".  结果"RIELWHEEL"
    INSPECT CS REPLACING FIRST "EE" BY "00",ALL "WH" BY "TH",CHARACTERS BY SPACE.  结果" 00 TH   "
INSPECT CONVERTING
    就是INSPECT REPLACING的缩写。
    INSPECT CS CONVERTING "EE" TO "00". 也可以加上BEFORE,AFTER。

STRING
    将几个字符串合并成一个字符串。
    STRING A DELIMITED BY SPACE," !" DELIMITED BY SIZE INTO C.假设A中的内容是"HELLO",则结果是"HELLO !".
    DELIMITED BY SPACE意思是碰到空格,或到A的结尾或C的结尾,则合并A字符串结束。
    DELIMITED BY SIZE意思是到" !"的结尾或C的结尾,则合并" !"字符串结束。
    STRING A INTO B POINTER C ON OVERFLOW PROC1 NOT ON OVERFLOW  PROC2.
    将A字符串复制到B中由C开始的地址处。如果C小于1或大于B的长度,或A的长度大于B中C到结尾处的长度,则发生
    OVERFLOW溢出,执行PROC1。

UNSTRING
    将一个字符串中的字符按照要求放入多个变量中。
    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中的字符放入C,如果还有其他变量,如C2,则等C放满后放入C2。
    DELIMITED BY和STRING中的作用一样。表示将AAA中到B为止的字符取出。如果有OR,则表示到B或C字符为止的字符取出。如果有ALL,则如果几个相同的B在一起,则认为是一个B。
    DELIMITER IN 将B放入D,知道是哪个字符为分隔符。
    COUNT IN 实际复制到C中的字符数放入E中。
    WITH POINTER 和STRIGN中一样。
    TALLYING IN 计算有几个接受项。访问一个新的接受项,G值加1。
例子:
    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.
    执行结果CITY值是NEW YORK.ZIP的值是NY 10017。

逻辑和控制语句
    IF (A [NOT] > B) 等价于 IF (A [NOT] GREATER THAN B)
    IF (A [NOT] < B) 等价于 IF (A [NOT] LESS THAN B)
    IF (A [NOT] = B) 等价于 IF (A [NOT] EQUAL TO B)
    IF (A >= B) 等价于 IF (A GREATER THAN OR EQUAL TO B)
    IF (A <= B) 等价于 IF (A LESS THAN OR EQUAL TO B)

IF A IS [NOT] NUMERIC    数字和可选符号
    IF A IS [NOT] ALPHABETIC A~Z,a~z字符和空格
    IF A IS [NOT] ALPHABETIC-LOWER a~z字符和空格
    IF A IS [NOT] ALPHABETIC-UPPER A~Z字符和空格
    IF A IS [NOT] CLASS-NAME       SPECIAL-NAMES定义的字符集
    例如:SPECIAL-NAMES.
              CLASS MYDEFINE IS "12345+ABCDE-".

判断变量是否定义了数值。这个变量是88层的,且要与一个数据项关联。
    03 STATE PIC XX.
    88 CON VALUES ARE "A","B","C".
    IF CON ...

判断厂家定义运行开关的开/关状态。
    SPECIAL-NAMES.
        SWITCH-A ON STATUS IS A-ON ,OFF STATUS IS A-OFF.
    IF A-ON...
    若开关在开位置,则IF A-ON返回TRUE。

IF A IS [NOT] POSITIVE  判断是否大于0
    IF A IS [NOT] NEGATIVE  判断是否小于0
    IF A IS [NOT] ZERO      判断是否等于0

COBOL支持NOT ,AND ,OR 操作。

PERFORM
    过程调用,但是不传递参数。
  PERFORM PROC1 [THROUGH PROC2] 
    执行完PROC1再执行PROC2.没有THROUGH(THRU)就只执行PROC1.
  PERFORM PROC1 [THRU PROC2] N TIMES
    执行PROC1[或者还有PROC2]N次。
  PERFORM PROC1 [THRU PROC2] [WITH TEST BEFORE/AFTER] UNTIL A NOT EUQAL 0.
    执行PROC1[或者还有PROC2]直到A不等于0。WITH TEST BEFORE/AFTER指定在第一次执行之前还是之后判断条件。默认是BEFORE,执行之前判断。
  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循环,将A的值从B开始,以C为单位递增,直到满足CONDITION1。AFTER语句是一个嵌套的FOR 循环。VARYING是外循环,AFTER是内循环。A,B可以是索引。

过程也可以直接写入PERFORM中。但是THROUGH就不好用了。语法如下 :
  PERFORM 过程语句 END-PERFORM.
  PERFORM N TIMES 过程语句 END-PERFORM.
  PERFORM [WITH TEST BEFORE/AFTER] UNTIL CONDITION 过程语句 END-PERFORM.
  PERFORM [WITH TEST BEFORE/AFTER] VARYING A FROM B BY C UNTIL CONDITION1 过程语句 END-PERFORM.

IF语句
  IF CONDITION THEN STATEMENTS1/NEXT SENTENCE ELSE STATEMENTS2 END-IF/NEXT SENTENCE/ENDIF
    NEXT SENTENCE将跳出IF操作语句执行下一条语句。
    IF语句中不要使用.句号。.句号将结束所有IF语句。要结束一个嵌套的IF语句,可以使用END-IF或者NEXT SENTENCE.如
    IF A IF B END-IF ELSE C END-IF.或者
    IF A IF B ELSE NEXT SENTENCE ELSE C END-IF.

EVALUATE
    相当于SWITCH CASE语句。
    EVALUATE A
        WHEN B ...
        WHEN 0 THRU 100 ...(FROM 0 TO 100)
        WHEN OTHER ...
    [END-EVALUATE]
    首先得到A的结果,和WHEN语句的参数比较,如果和B相等,就执行B后的操作,执行完了不再执行后面的WHEN语句。如果不等就执行下一条WHEN语句。如果没有相等的就执行WHEN OTHER语句。
    EVALUATE A ALSO B
        WHEN C ALSO D ...
        WHEN E ALSO F ...
        WHEN OTHER ...
    对于有多个判断条件的,要多个条件同时满足。如上要C=A同时D=B,才执行WHEN语句。

CONTINUE
    继续执行下面的程序。

GO TO
    GO TO PROC1 [DEPENDING ON N] DEPENDING ON N将跳转到清单中的第N个PROC.

EXIT
    一般为最后一句话。

STOP
    STOP RUN  结束程序。

ALTER
    ALTER PROC1 TO PROC2. 不懂什么意思,反正已经从标准中废除了这个语句。

ENTER
    使其他编程语言中的语句可以放进当前源程序中。
    ENTER LANGUAGE-NAME [ROUTINE-NAME]
    LANGUAGE 是厂家指定可以输入COBOL的任何语言,这个语句后面是其他编程语言的语句,然后要用ENTERCOBOL表示返回COBOL语言。
    如果无法将其他语言的程序直接放入,可以用ROUTINE-NAME引用其他语言编写的程序。

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/didostream/archive/2006/04/25/676319.aspx

cobol学习4--语法与文法(2)相关推荐

  1. COBOL 学习笔记 之 入門篇(续集)

    书接上一回(COBOL 学习笔记 之 入門篇 ) 从程序可以看到,COBOL程序分为四部分: IDENTIFICATION DIVISION.  ENVIRONMENT    DIVISION.  D ...

  2. php学语法,PHP入门学习——PHP语法

    PHP入门学习--PHP语法 一.PHP简介 (1)PHP:中文名,超文本预处理器,是一种通用开源脚本语言: (2)Dreamweaver介绍 (3)四种定界符标准风格:: 短标记风格: ?>: ...

  3. 【NLP】语法、文法、句法、词法概念的区别

    语法.文法.句法.词法概念的区别: 语法与文法表示同一概念,不同角度诠释而言. 句法,描述句子的结构,词之间的依赖关系. 词法,研究词自身的结构与性质.

  4. rust 入门笔记: rustlings(推荐一些学习rust语法的一些非常好的小练习)

    rustlings 推荐一个学习rust非常好的repo: Small exercises to get you used to reading and writing Rust code! - 学习 ...

  5. 【学习python语法】

    学习python语法 功能快捷键 导入python包 输入与打印 global的使用 pthon字符串的部分操作 python中的数学模型 学习python中的列表模型 学习python中的元组模型 ...

  6. C/C++学习指南(语法篇) - 邵发

    C/C++学习指南(语法篇),清华大学出出版,作者:邵发 ,ISBN: 9787302419891,一部C/C++基础语法教材,配套100集视频讲解,在线题库.官网:阿发你好 本书简介 一部C/C++ ...

  7. mysql语法大全w3school_(二)mysql:在w3schools文档上学习sql语法(使用数据库创建一张表)...

    1.选中要使用的数据库(选中上篇创建的test数据库) 现有的数据库 mysql>use test; 则选中test数据库: 2.创建一张表 2.1column代表每一列的名称,datatype ...

  8. 【转载】如何高效地学习英语语法?

    干货预警,全文手码6500字,写了整整三个星期.认真读完本文并实践你的语法会有质变. 我在大学本科的四年间,完成了从语言"低能"到多语种使用者的转变,英语到达了雅思8分,西班牙语达 ...

  9. 学习md语法 模版示例 ----持续更新

    标题目录 学习md语法 新的改变 功能快捷键 合理的创建标题,有助于目录的生成 如何改变文本的样式 插入链接与图片 如何插入一段漂亮的代码片 生成一个适合你的列表 创建一个表格 设定内容居中.居左.居 ...

最新文章

  1. ubuntu制作usb启动盘
  2. 关于setTimeout和setInterval的函数参数问题
  3. PostgreSQL 9.6 keepalived主从部署
  4. 《黑客》月刊中文版第一期正式发布,很给力!推荐围观!
  5. TensorFlow2.0 —— 模型保存与加载
  6. 去除android控件滑动的时候出现的阴影
  7. mysql show status 过滤_在线更改复制过滤选项的方法
  8. linux系统镜像iso文件下载
  9. ctfshow 做题 MISC入门 模块 11-20
  10. 蓝桥杯计算机软件大赛什么时间,“蓝桥杯”全国软件设计大赛
  11. c语言随机生成整数存放一维数组_从创建数组到矩阵运算,一文带你看懂Numpy
  12. 吉林大学计算机学院学位预警,长春新区发布2021年学位预警!7所学校学位告急!...
  13. SAP FI02和FI12银行主数据的维护
  14. Springboot美食分享系统716y7计算机毕业设计-课程设计-期末作业-毕设程序代做
  15. 游戏开发学习路线图(2023最新版)建议收藏
  16. C语言结构体数组,结构体数组的定义,结构体数组的输出,结构体的应用
  17. 【大数据】为什么要学习大数据
  18. 最近在关注冰岩作坊自己写的一个ftp的搜索
  19. HBase如何快速查询
  20. 重庆天象网络技术:三分构图法帮你做好版式设计

热门文章

  1. mybatis与spring整合详解
  2. 英超前瞻乐.fun|体育 中秋利物浦主场对战狼队 历史交战能否延续全胜
  3. AFX_VIRTUAL
  4. Android 文件存储-图片存储
  5. OpenCV VideoCapture使用方法(视频文件、摄像头、网络视频文件)
  6. webpack打包vue项目之后生成的dist文件该怎样启动运行跑起来
  7. HVCC文史通证行业顶尖技术确保安全无忧
  8. android studio虚拟机无法启动 The system requirements are not satisfied、vmx enabled no、vmx supported no
  9. css3新动_10款重量级CSS3的全新特效 实现超酷前端动画效果
  10. 深入浅出--何为多线程(引用自大神Kyrie lrving)