COBOL技术问询:如何创建包含两个条目的文件及实现日期文件与多记录文件的合并
我来帮你一步步搞定这两个COBOL实操问题,直接上可运行的代码和清晰的解释:
问题1:创建包含两个条目的COBOL文件
要创建带两条记录的文件,核心是定义文件结构、打开输出文件、写入两条记录后关闭。下面是完整的示例代码:
IDENTIFICATION DIVISION. PROGRAM-ID. CREATE-TWO-RECORDS. ENVIRONMENT DIVISION. INPUT-OUTPUT SECTION. FILE-CONTROL. SELECT OUTPUT-FILE ASSIGN TO 'two_records.dat' ORGANIZATION IS LINE SEQUENTIAL. DATA DIVISION. FILE SECTION. FD OUTPUT-FILE. 01 OUTPUT-RECORD. 05 REC-ID PIC X(03). 05 REC-DESC PIC X(20). WORKING-STORAGE SECTION. 01 WS-COUNTER PIC 9(01) VALUE 0. PROCEDURE DIVISION. MAIN-LOGIC. OPEN OUTPUT OUTPUT-FILE. * 写入第一条记录 MOVE '001' TO REC-ID. MOVE 'First Sample Record' TO REC-DESC. WRITE OUTPUT-RECORD. * 写入第二条记录 MOVE '002' TO REC-ID. MOVE 'Second Sample Record' TO REC-DESC. WRITE OUTPUT-RECORD. * 关闭文件 CLOSE OUTPUT-FILE. STOP RUN.
关键说明:
SELECT OUTPUT-FILE指定输出文件的路径和格式(这里用行序组织,适合文本类文件)FD定义文件的记录结构,你可以根据需求调整PIC的类型和长度WRITE语句负责将内存中的记录写入磁盘文件,执行两次就生成两条条目
问题2:日期与多条记录拼接
这个需求需要先读取日期文件的唯一日期值,再循环读取记录文件的每条记录,将日期和记录拼接后写入输出文件。示例代码如下:
IDENTIFICATION DIVISION. PROGRAM-ID. CONCAT-DATE-RECORDS. ENVIRONMENT DIVISION. INPUT-OUTPUT SECTION. FILE-CONTROL. SELECT DATE-FILE ASSIGN TO 'date_input.dat' ORGANIZATION IS LINE SEQUENTIAL. SELECT RECORD-FILE ASSIGN TO 'records_input.dat' ORGANIZATION IS LINE SEQUENTIAL. SELECT OUTPUT-FILE ASSIGN TO 'concatenated_output.dat' ORGANIZATION IS LINE SEQUENTIAL. DATA DIVISION. FILE SECTION. FD DATE-FILE. 01 DATE-RECORD PIC 9(08). *> 存储8位日期,比如20200509 FD RECORD-FILE. 01 INPUT-RECORD PIC X(07). *> 存储7位记录,比如0000001 FD OUTPUT-FILE. 01 OUTPUT-RECORD PIC X(15). *> 8位日期+7位记录=15位长度 WORKING-STORAGE SECTION. 01 WS-DATE PIC 9(08). 01 WS-EOF-FLAG PIC X(01) VALUE 'N'. PROCEDURE DIVISION. MAIN-LOGIC. * 第一步:读取日期文件的日期值 OPEN INPUT DATE-FILE. READ DATE-FILE INTO WS-DATE. CLOSE DATE-FILE. * 第二步:循环处理记录文件,拼接后写入输出 OPEN INPUT RECORD-FILE. OPEN OUTPUT OUTPUT-FILE. PROCESS-RECORDS. READ RECORD-FILE AT END MOVE 'Y' TO WS-EOF-FLAG END-READ. IF WS-EOF-FLAG = 'N' MOVE WS-DATE TO OUTPUT-RECORD(1:8) MOVE INPUT-RECORD TO OUTPUT-RECORD(9:7) WRITE OUTPUT-RECORD GO TO PROCESS-RECORDS END-IF. * 关闭所有文件 CLOSE RECORD-FILE. CLOSE OUTPUT-FILE. STOP RUN.
关键说明:
- 用
INTO WS-DATE把日期文件的内容存到工作存储变量里,方便后续复用 OUTPUT-RECORD(1:8)和OUTPUT-RECORD(9:7)是位置引用,分别把日期放在前8位、记录放在后7位,实现拼接AT END用来判断记录文件是否读完,读完就退出循环
内容的提问来源于stack exchange,提问作者jenedith_e8
相关产品推荐
相关产品推荐

