如果超过 1000000 行,我如何在 Progress4GL 中拆分 a.csv 文件

How can I split a.csv file in Progress4GL if it exceeds 1000000 lines

在我的程序中,我正在输出一个超过 1000000 行的 .csv 文件。目前在文件导出后,我正在使用以下命令从 linux 中拆分文件。但是,我想知道我们是否可以使用进度代码拆分文件。如果是这样,有人可以告诉我如何做吗。

下面是我手动使用的linux命令。

ls -l xa*
split -1000000 filename.csv
mv xaa filename-01.csv
mv xab filename-02.csv

在没有任何代码可以使用的情况下,我发明了一些输出到不同文件的代码。您将必须使用 OUTPUT TO 并设置新文件名。

此示例将输出 1050 行拆分为每个 100 行的文件。

DEFINE VARIABLE iLinesToOutput AS INTEGER NO-UNDO INIT 1050.
DEFINE VARIABLE iSplitAt       AS INTEGER NO-UNDO INIT  100.

DEFINE VARIABLE iLine AS INTEGER   NO-UNDO.
DEFINE VARIABLE cFile AS CHARACTER NO-UNDO.
DEFINE VARIABLE iFile AS INTEGER   NO-UNDO.
DEFINE VARIABLE iOpen AS INTEGER   NO-UNDO.

DEFINE STREAM str.

DO iLine = 1 TO iLinesToOutput:
    
    // Open a new stream/file    
    IF (iLine - 1 ) MOD iSplitAt = 0 THEN DO:
        iFile = iFile + 1.
        cFile  = "c:\temp\file-" + STRING(iFile, "999") + ".txt".
        OUTPUT STREAM str TO VALUE(cFile).
        EXPORT STREAM str DELIMITER "," "Customer ID" "Order Number" "Contact" "Count"
    END.
    
    // Output some data
    PUT STREAM str UNFORMATTED "Line " iLine SKIP.
    
    // Close the stream/file 
    IF iLine MOD iSplitAt = 0 THEN DO:
        OUTPUT STREAM str CLOSE.
    END.
    
END.

/* Close last file if not exactly right number of lines */
/* This could also be checked but close twice doesn't really matter */
OUTPUT STREAM str CLOSE.