GnuCobol技术问题:无需重新打开如何重置读取顺序文件?
在GnuCobol中重新读取顺序文件(无需重新打开)
针对你遇到的问题,直接用COBOL标准的REWIND语句就能解决,不用重新打开文件,自然不会丢失之前的工作内容。
核心解决步骤
- 确保文件以
INPUT或I-O模式打开(不要用OUTPUT或EXTEND模式,前者会清空文件,后者是追加模式,REWIND无效) - 在需要回到文件开头时,执行
REWIND 你的文件名语句 - 重置EOF标志后,就能从头开始读取记录
示例代码
IDENTIFICATION DIVISION. PROGRAM-ID. REWIND-DEMO. ENVIRONMENT DIVISION. INPUT-OUTPUT SECTION. FILE-CONTROL. SELECT TEST-FILE ASSIGN TO 'data.txt' ORGANIZATION IS SEQUENTIAL ACCESS MODE IS SEQUENTIAL. DATA DIVISION. FILE SECTION. FD TEST-FILE. 01 TEST-RECORD PIC X(50). WORKING-STORAGE SECTION. 01 END-OF-FILE PIC X VALUE 'N'. PROCEDURE DIVISION. MAIN-PROCESS. * 以I-O模式打开,支持读写和指针重置 OPEN I-O TEST-FILE. * 第一次读取并处理部分记录 PERFORM READ-FIRST-BATCH. * 回卷文件到开头 REWIND TEST-FILE. MOVE 'N' TO END-OF-FILE. * 从头开始读取所有记录 PERFORM READ-ALL-RECORDS. CLOSE TEST-FILE. STOP RUN. READ-FIRST-BATCH. READ TEST-FILE AT END MOVE 'Y' TO END-OF-FILE END-READ. IF END-OF-FILE = 'N' * 这里可以添加你的处理逻辑,比如修改记录后执行REWRITE PERFORM READ-FIRST-BATCH END-IF. READ-ALL-RECORDS. READ TEST-FILE AT END MOVE 'Y' TO END-OF-FILE END-READ. IF END-OF-FILE = 'N' DISPLAY TEST-RECORD PERFORM READ-ALL-RECORDS END-IF.
注意事项
- 如果是仅读取文件,用
INPUT模式打开即可,REWIND同样生效 - 若之前对文件做了修改,确保修改后执行了
REWRITE(针对已有记录)或WRITE(新增记录),这些修改不会因为REWIND丢失 - 部分旧版本COBOL可能对
REWIND支持有限,但GnuCobol完全兼容这个标准语句
内容的提问来源于stack exchange,提问作者Luciano Junior
相关产品推荐
相关产品推荐

