免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2404 | 回复: 5
打印 上一主题 下一主题

请教400下COBOL开发时REWRITE的问题。 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-12-22 16:39 |只看该作者 |倒序浏览
程序目标是:根据输入的INP-KEY01查找到相应的记录。
            然后将FILE01中这条记录的DATA01的值修改为“XXXXXXXXXX”。

程序的问题是:无法变更DATA01的值。且程序不报任何错误。

请教:START和REWRITE的用法。

请高手指教。谢谢。
程序源代码如下:

IDENTIFICATION DIVISION.
       PROGRAM-ID.    COBOLFILEU.
       ENVIRONMENT DIVISION.
       INPUT-OUTPUT SECTION.
       FILE-CONTROL.
           SELECT FILE01   ASSIGN TO DATABASE-FILE01
                           ORGANIZATION IS INDEXED
                           RECORD KEY IS KEY01
                           FILE STATUS IS FILE-ST.
       DATA        DIVISION.
       FILE SECTION.
       FD  FILE01
                  LABEL RECORD IS STANDARD
                  RECORD 34.
       01  REC01.
           02  KEY01          PIC  X(4).
           02  DATA01         PIC  X(10).
           02  FILLER         PIC  X(20).
       WORKING-STORAGE SECTION.
       01  INP-KEY01 PIC  9999.
       01  EMP-FLG   PIC  9 VALUE 0.
       77  FILE-ST    PIC  X(002).
       PROCEDURE DIVISION.
       MAIN SECTION.
       MAIN-01.
           ACCEPT INP-KEY01
           PERFORM INT
           PERFORM SEL
           PERFORM FIN.
       MAIN-99.
           STOP RUN.
       INT SECTION.
       INT-01.
           INITIALIZE EMP-FLG
           OPEN I-O FILE01.
       INT-99.
           EXIT.
       SEL SECTION.
       SEL-01.
           MOVE INP-KEY01 TO KEY01
           START FILE01
             KEY IS EQUAL KEY01
             INVALID KEY DISPLAY "NO RESULT"
           END-START.
           MOVE "XXXXXXXXXX" TO DATA01.
           REWRITE REC01
             INVALID KEY GO TO FIN
           END-REWRITE.
       SEL-99.
           EXIT.
       READF SECTION.
       READF-01.
           READ FILE01 AT END MOVE 1 TO EMP-FLG.
       READF-99.
           EXIT.
       FIN SECTION.
       FIN-01.
           CLOSE FILE01.
       FIN-99.
           EXIT.

论坛徽章:
0
2 [报告]
发表于 2005-12-23 10:00 |只看该作者

回复 1楼 shalashaska 的帖子

很少用START …… EQUAL ……
我平时习惯这么写,给你参考一下。

           MOVE INP-KEY01 TO KEY01
           READ  FILE01 KEY IS KEY01 INVALID KEY
                      DISPLAY "NO RESULT"
                     GO TO  SEL-99.
           MOVE "XXXXXXXXXX" TO DATA01.
           REWRITE REC01.

你可以测试一下,在
  
           MOVE "XXXXXXXXXX" TO DATA01.
           REWRITE REC01
             INVALID KEY GO TO FIN
           END-REWRITE.
下面添加
         DISPLAY REC01 LINE 4 POSITION 5.
             ACCEPT  CHR     LINE 4 POSITION 5.

我都是这样一点点地试看这个语句怎么执行的。

很少碰到搞COBOL的,可以交流一下。 janedots@hotmail.com

论坛徽章:
0
3 [报告]
发表于 2005-12-23 18:51 |只看该作者
start就是定位到相同key值的记录集合的第一条记录,  一般是循环里面.
rewrite就是update同一条记录, 赋予记录的某些字段新值.

论坛徽章:
0
4 [报告]
发表于 2005-12-26 10:47 |只看该作者
按照janedots 的建议编译的话会有如下三个提示:
1 MSGID: LNC0407 重大度20
READ的后面应该跟随的AT END子句没有,不能被接收。
2 MSGID: LNC1409 重大度30
被指定的KEY和ACCESS之间是矛盾的。
3 MSGID: LNC0648 重大度20
顺序访问的文件FILE01的READ时使用INVALID是不被允许的。操作被忽略。

我的理解:对于第一个错误是不是说在READ后面应该紧跟着使用AT END子句呢?
          对于第二个错误我是纯不明白怎么回事了。
          对于第三个错误是不是我的文件的类型定义的不对呢?我的定义是(ORGANIZATION IS INDEXED)
请教。请教。谢谢。

论坛徽章:
0
5 [报告]
发表于 2005-12-26 16:05 |只看该作者
以上的问题得到了解决,解决的方法是:
在原有的FILE-CONTROL.
中加上一句
ACCESS MODE IS DYNAMIC
就可以了。源代码不用做其它的更改。

并且使用START也是可以达到预期效果的。
我觉得START的使用就好像是定位指针一样。不知道小弟我的理解是否正确。

在此谢谢janedots姐姐和大肥肥哥哥的帮助。

论坛徽章:
0
6 [报告]
发表于 2005-12-26 17:50 |只看该作者
原帖由 shalashaska 于 2005-12-26 16:05 发表
以上的问题得到了解决,解决的方法是:
在原有的FILE-CONTROL.
中加上一句
ACCESS MODE IS DYNAMIC
就可以了。源代码不用做其它的更改。

并且使用START也是可以达到预期效果的。
我觉得START的使用就好像 ...


start就是定位用的, 在相同的key情况下,会把所有记录都检索出来, 这样你就可以
操作这个记录集合了. cobol的手册上应该有详细的说明吧.
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP