2014-05-14 42 views
2

我填充一個臨時從查詢,臨時表的樣子,如何將數據寫入到CSV文件中ABL在這個臨時表編碼

ttcomp.inum 
ttcomp.iname 
ttcomp.iadd 

有5000條記錄,現在我想寫一個CSV文件。我認爲這可以用​​完成,但我不知道如何實現這一點。請有人幫我解決這個問題。

+0

看http://stackoverflow.com/questions/9359154/writing-temp-table-value-into-csv-file – Austin

回答

7

出口的伎倆:

/* 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問逗號,不是分號分隔的輸出。否則,這個例子很好。 –

+1

@TimKuehn好點。就像我平時做的一樣。我會編輯答案。 – Jensd

+1

@Jensd酷,我更喜歡讓我的分隔符變量初始值設置,所以它是一個地方在代碼的頂部更改分隔符如果有人希望從說「,」更改爲「|」 – AquaAlex

0

這裏是沒有流的替代品。

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