You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求下述Easytrieve REPORT语句在COBOL中的替代实现

Easytrieve报表代码的COBOL等效实现解释

原Easytrieve代码功能解析(中文翻译)

这段Easytrieve代码用于生成一份分组汇总报表,具体逻辑如下:

  • 报表名称为RPT2,输出目标为打印机PRT2
  • 启用汇总模式,基于汇总文件、交易数据和控制规则生成报表,同时保留明细数据副本
  • 数据按EXT-FUND-NO(外部基金编号)、EXT-TRAN-CODE(外部交易代码)排序,并以此两个字段作为分组控制键
  • 报表每行输出分组的基金编号、交易代码、该组的记录总数(TALLY),以及加元价格、股份数量、实际金额字段

COBOL替代实现代码

以下是对应功能的COBOL代码,分模块说明:

1. 环境部

定义输入文件、排序文件和打印机输出:

ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
    SELECT INPUT-FILE ASSIGN TO "INPUT.DAT"
        ORGANIZATION IS LINE SEQUENTIAL.
    SELECT SORTED-FILE ASSIGN TO "SORTED.DAT"
        ORGANIZATION IS LINE SEQUENTIAL.
    SELECT PRINTER-FILE ASSIGN TO PRT2
        ORGANIZATION IS LINE SEQUENTIAL.
    SELECT SORT-FILE ASSIGN TO SORTWK01
        ORGANIZATION IS SEQUENTIAL
        ACCESS MODE IS SEQUENTIAL
        FILE STATUS IS WS-SORT-STATUS.

2. 数据部

定义数据结构、汇总变量和报表格式:

DATA DIVISION.
FILE SECTION.
FD INPUT-FILE.
01 INPUT-RECORD.
    05 EXT-FUND-NO       PIC X(10).
    05 EXT-TRAN-CODE     PIC X(05).
    05 EXT-CAN-PRICE     PIC 9(05)V99.
    05 EXT-NO-SHARES     PIC 9(08).
    05 EXT-REAL-AMT      PIC 9(07)V99.

FD SORTED-FILE.
01 SORTED-RECORD        PIC X(32).  *> 长度与INPUT-RECORD一致

FD PRINTER-FILE.
01 PRINTER-RECORD       PIC X(80).

SD SORT-FILE.
01 SORT-RECORD.
    05 EXT-FUND-NO-S    PIC X(10).
    05 EXT-TRAN-CODE-S  PIC X(05).
    05 REST-OF-RECORD   PIC X(17).

WORKING-STORAGE SECTION.
01 WS-CONTROL-VARS.
    05 WS-PREV-FUND-NO  PIC X(10) VALUE SPACES.
    05 WS-PREV-TRAN-CODE PIC X(05) VALUE SPACES.
    05 WS-TALLY         PIC 9(04) VALUE ZERO.
    05 WS-SORT-STATUS   PIC X(02) VALUE SPACES.

01 WS-REPORT-LINE.
    05 FILLER           PIC X(05) VALUE SPACES.
    05 WS-FUND-NO       PIC X(10).
    05 FILLER           PIC X(03) VALUE SPACES.
    05 WS-TRAN-CODE     PIC X(05).
    05 FILLER           PIC X(03) VALUE SPACES.
    05 WS-TALLY-DISP    PIC ZZ99.
    05 FILLER           PIC X(03) VALUE SPACES.
    05 WS-CAN-PRICE     PIC $$999.99.
    05 FILLER           PIC X(03) VALUE SPACES.
    05 WS-NO-SHARES     PIC Z,ZZZ,ZZ9.
    05 FILLER           PIC X(03) VALUE SPACES.
    05 WS-REAL-AMT      PIC $$999,999.99.

3. 过程部

实现排序、分组汇总和报表输出逻辑:

PROCEDURE DIVISION.
MAIN-LOGIC.
    PERFORM SORT-INPUT-DATA.
    PERFORM PROCESS-SORTED-DATA.
    STOP RUN.

SORT-INPUT-DATA.
    SORT SORT-FILE
        ON ASCENDING KEY EXT-FUND-NO-S
        ON ASCENDING KEY EXT-TRAN-CODE-S
        USING INPUT-FILE
        GIVING SORTED-FILE
    IF WS-SORT-STATUS NOT = '00'
        DISPLAY "SORT FAILED WITH STATUS: " WS-SORT-STATUS
        STOP RUN.

PROCESS-SORTED-DATA.
    OPEN INPUT SORTED-FILE
    OUTPUT PRINTER-FILE.
    READ SORTED-FILE
        AT END MOVE 'Y' TO WS-END-OF-FILE.
    PERFORM UNTIL WS-END-OF-FILE = 'Y'
        MOVE EXT-FUND-NO TO WS-FUND-NO
        MOVE EXT-TRAN-CODE TO WS-TRAN-CODE.
        *> 初始化分组计数器
        MOVE 1 TO WS-TALLY.
        *> 读取同组后续记录
        PERFORM READ-NEXT-RECORD
            UNTIL EXT-FUND-NO NOT = WS-PREV-FUND-NO
                OR EXT-TRAN-CODE NOT = WS-PREV-TRAN-CODE
                OR WS-END-OF-FILE = 'Y'.
        *> 填充并输出报表行
        MOVE WS-TALLY TO WS-TALLY-DISP
        MOVE EXT-CAN-PRICE TO WS-CAN-PRICE
        MOVE EXT-NO-SHARES TO WS-NO-SHARES
        MOVE EXT-REAL-AMT TO WS-REAL-AMT
        MOVE WS-REPORT-LINE TO PRINTER-RECORD
        WRITE PRINTER-RECORD.
        *> 更新上一组控制键
        MOVE EXT-FUND-NO TO WS-PREV-FUND-NO
        MOVE EXT-TRAN-CODE TO WS-PREV-TRAN-CODE.
    END-PERFORM.
    CLOSE SORTED-FILE PRINTER-FILE.

READ-NEXT-RECORD.
    READ SORTED-FILE
        AT END MOVE 'Y' TO WS-END-OF-FILE
        NOT AT END ADD 1 TO WS-TALLY.

内容的提问来源于stack exchange,提问作者mahesh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 16:58:18