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

3
我从一个查询中获取了数据并填充了一个临时表,这个临时表看起来像这样:
ttcomp.inum
ttcomp.iname
ttcomp.iadd

这个临时表中有5000条记录,现在想把它们写入CSV文件。我认为可以使用输出流来实现,但我不知道如何操作。请有经验的人帮我解决这个问题。


请查看http://stackoverflow.com/questions/9359154/writing-temp-table-value-into-csv-file。 - Austin
3个回答

9

导出就是解决方法:

/* 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 */

1
OP要求逗号分隔的输出,而不是分号。除此之外,这个例子很好。 - Tim Kuehn
1
@TimKuehn 很好的观点。我刚才按照自己通常的做法去做了,我会编辑答案的。 - Jensd
1
@Jensd 很酷,我更喜欢将分隔符设置为一个变量,并初始化其值,这样在代码顶部只需更改一处即可将分隔符从 "," 更改为 "|"。 - AquaAlex
@AquaAlex 这是个好办法!我只是给你提供了一个基本的示例! :) - Jensd

1
这是一个不使用流的替代方案。
/* 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.

1

还有另一种方法。如果格式不重要,EXPORT是一个不错的选择,因为EXPORT会忽略格式。例如,您不想将日期格式设置为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.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接