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

RPGLE自由格式:如何用SETLL和READE查找指定键控字段重复记录

RPGLE自由格式:用SETLL和READE查找第二个键控字段的重复记录

我明白你要解决的问题——用RPGLE自由格式的SETLL和READE找出文件中第二个键控字段的重复记录,你的初始代码只做了简单的存在性检查(相当于去重),没法定位重复的记录对吧?下面给你一个可行的实现方案,附带详细解释:

前提准备

首先要确保你的源文件(假设叫INPUTFILE)能通过第二个键控字段(比如XXPART)进行键值访问:

  • 如果源文件的主键不包含XXPART作为可查询的键项,你需要创建一个逻辑文件或者SQL视图,将XXPART设为键字段(比如逻辑文件的键定义为XXPART,或者包含XXPART的组合键),这样SETLL和READE才能按XXPART分组读取记录。

完整示例代码

// 定义文件:INPUTFILE为源数据文件,OUTPUTWORKFILE为输出重复记录的文件
dcl-f INPUTFILE keyed;
dcl-f OUTPUTWORKFILE disk;

// 定义变量:存储当前处理的XXPART、计数、临时记录缓存
dcl-s currentPart like(INPUTFILE.XXPART);
dcl-s partCount packed(5:0);
dcl-s tempRec like(INPUTFILE);

/free
    // 定位到源文件起始位置,读取第一条记录
    SETLL *START INPUTFILE;
    READ INPUTFILE;

    // 遍历源文件所有不同的XXPART分组
    dow not %eof(INPUTFILE);
        currentPart = INPUTFILE.XXPART;
        partCount = 0;

        // 第一步:统计当前XXPART的出现次数
        SETLL (currentPart) INPUTFILE;
        READE (currentPart) INPUTFILE tempRec;
        dow not %eof(INPUTFILE);
            partCount += 1;
            READE (currentPart) INPUTFILE tempRec;
        enddo;

        // 如果该XXPART出现多次(即存在重复),写入所有对应记录到输出文件
        if partCount > 1;
            SETLL (currentPart) INPUTFILE;
            READE (currentPart) INPUTFILE;
            dow not %eof(INPUTFILE);
                WRITE OUTPUTWORKFILE;
                READE (currentPart) INPUTFILE;
            enddo;
        endif;

        // 跳转到下一个不同的XXPART,避免重复处理同一分组
        SETGT (currentPart) INPUTFILE;
        READ INPUTFILE;
    enddo;

    // 关闭文件,结束程序
    close INPUTFILE;
    close OUTPUTWORKFILE;
    *inlr = *on;
/end-free

代码逻辑解释

  1. 初始化与遍历分组:

    • 用SETLL *START和READ定位到源文件的第一条记录,开启主循环。
    • 每次循环获取当前的XXPART,作为要检查的目标字段。
  2. 统计重复次数:

    • 用SETLL (currentPart) INPUTFILE定位到该XXPART的第一条记录。
    • 通过READE遍历所有同XXPART的记录,统计出现次数partCount。
  3. 输出重复记录:

    • 如果partCount > 1(说明该XXPART存在重复),再次用SETLL和READE遍历该分组的所有记录,写入到输出文件OUTPUTWORKFILE。
  4. 跳过已处理分组:

    • 用SETGT (currentPart) INPUTFILE跳转到比当前XXPART更大的下一条记录,确保主循环只处理每个XXPART一次,避免重复统计。

额外注意事项

  • 如果你的输出需求是仅保留重复的XXPART值(而非所有对应记录),可以修改逻辑,在partCount > 1时只写入一次currentPart即可。
  • 确保输出文件OUTPUTWORKFILE的记录格式与源文件兼容,或者根据需求调整字段映射。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 11:07:45