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

如何在Progress4GL中实现超100万行.csv文件的自动拆分

Progress 4GL 实现CSV大文件拆分方案

实现逻辑

  • 按行读取源CSV文件,默认每100万行拆分生成一个新文件
  • 可选配置:是否给每个拆分文件都携带源文件的表头(适合带表头的标准CSV格式)
  • 自动按规则命名拆分后的文件,如filename-01.csv、filename-02.csv格式

完整代码示例

DEFINE VARIABLE iLineCount     AS INTEGER     NO-UNDO.
DEFINE VARIABLE iFileSeq       AS INTEGER     NO-UNDO.
DEFINE VARIABLE cSourceFile    AS CHARACTER   NO-UNDO INIT "你的源文件路径/filename.csv".
DEFINE VARIABLE cTargetFile    AS CHARACTER   NO-UNDO.
DEFINE VARIABLE cLineContent   AS CHARACTER   NO-UNDO.
DEFINE VARIABLE cHeader        AS CHARACTER   NO-UNDO.
DEFINE VARIABLE iMaxLines      AS INTEGER     NO-UNDO INIT 1000000. /* 单文件最大行数 */

/* 打开源CSV文件 */
INPUT FROM VALUE(cSourceFile).

/* 读取表头(如果不需要保留表头可以删除这部分) */
IMPORT UNFORMATTED cHeader.

/* 初始化第一个拆分文件 */
iFileSeq = 1.
iLineCount = 0.
cTargetFile = REPLACE(cSourceFile, ".csv", "-" + STRING(iFileSeq, "99") + ".csv").
OUTPUT TO VALUE(cTargetFile).
/* 写入表头 */
PUT UNFORMATTED cHeader SKIP.

/* 逐行读取源文件内容 */
REPEAT:
    IMPORT UNFORMATTED cLineContent.
    
    /* 达到行数阈值时切换到下一个文件 */
    IF iLineCount >= iMaxLines THEN DO:
        OUTPUT CLOSE.
        iFileSeq = iFileSeq + 1.
        iLineCount = 0.
        cTargetFile = REPLACE(cSourceFile, ".csv", "-" + STRING(iFileSeq, "99") + ".csv").
        OUTPUT TO VALUE(cTargetFile).
        /* 新文件写入表头 */
        PUT UNFORMATTED cHeader SKIP.
    END.

    /* 写入当前行到目标文件 */
    PUT UNFORMATTED cLineContent SKIP.
    iLineCount = iLineCount + 1.
END.

/* 关闭所有打开的文件句柄 */
INPUT CLOSE.
OUTPUT CLOSE.

注意事项

  • 如果你的CSV没有表头,直接删除代码中读取、写入表头的相关代码段即可
  • 可以根据实际需求修改iMaxLines变量的值调整单文件的最大行数
  • 文件名序列的格式化字符串"99"支持最多生成99个拆分文件,如果你需要拆分更多文件,可以调整为"999"等更长的格式
  • 该方案是逐行读取写入,内存占用极低,适合处理GB级别的超大CSV文件

内容的提问来源于stack exchange,提问作者Varun K S

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 14:39:03