如何在ABL编码中将数据写入CSV文件

如何在ABL编码中将数据写入CSV文件,csv,progress-4gl,openedge,Csv,Progress 4gl,Openedge,我从查询中填充了一个临时表,临时表如下所示 ttcomp.inum ttcomp.iname ttcomp.iadd 这个临时表中有5000条记录,现在我想写一个CSV文件。我认为这可以通过输出流来实现,但我不知道如何实现。请有人帮我拿这个 导出实现了以下功能: /* Define a stream */ DEFINE STREAM str. /* Define the temp-table. I did some guessing according datatypes... */ DEF

我从查询中填充了一个临时表,临时表如下所示

ttcomp.inum
ttcomp.iname
ttcomp.iadd
这个临时表中有5000条记录,现在我想写一个CSV文件。我认为这可以通过
输出流来实现,但我不知道如何实现。请有人帮我拿这个

导出实现了以下功能:

/* Define a stream */
DEFINE STREAM str.

/* Define the temp-table. I did some guessing according datatypes... */
DEFINE TEMP-TABLE ttcomp
    FIELD inum  AS INTEGER
    FIELD iname AS CHARACTER
    FIELD iadd  AS INTEGER.

/* Fake logic that populates your temp-table is here */
DEFINE VARIABLE i AS INTEGER     NO-UNDO.
DO i = 1 TO 5000:
    CREATE ttComp.
    ASSIGN 
        ttComp.inum  = i
        ttComp.iname = "ABC123"
        ttComp.iadd  = 3.

END.
/* Fake logic done... */

/* Output the temp-table */
OUTPUT STREAM str TO VALUE("c:\temp\file.csv").
FOR EACH ttComp NO-LOCK:
    /* Delimiter can be set to anything you like, comma, semi-colon etc */
    EXPORT STREAM str DELIMITER "," ttComp.
END.
OUTPUT STREAM str CLOSE.
/* Done */

这里有一个没有流的替代方案

/* Using the temp-table. of Jensd*/
DEFINE TEMP-TABLE ttcomp
    FIELD inum  AS INTEGER
    FIELD iname AS CHARACTER
    FIELD iadd  AS INTEGER.

OUTPUT TO somefile.csv APPEND.

    FOR EACH ttcomp:
                DISPLAY 
                    ttcomp.inum + ",":U  
                    ttcomp.iname + ",":U
                    ttcomp..iadd  SKIP. 
    END.

OUTPUT CLOSE.

还有另一种方法。如果格式不重要,导出是好的,因为导出忽略格式。例如,您不希望日期的格式为mm/dd/yy。在这种情况下,最好使用PUT STREAM并显式指定格式

FOR EACH ttComp NO-LOCK:
    PUT STREAM str UNFORMATTED SUBSTITUTE("&1;&2;&3 \n", ttComp.inum, ttcomp.iname, ttcomp.iadd).
END.

请看OP请求的逗号,而不是分号分隔的输出。否则这个例子是好的。@TimKuehn很有道理。就像我平时做的那样。我会编辑答案。@Jensd很酷,我更喜欢将我的分隔符设置为初始值设置的变量,因此如果有人希望将分隔符从say“,”更改为“|”@AquaAlex这是一个很好的方法!我刚刚给你提供了一个基本的例子!:)