Как записать данные в файл CSV в кодировке ABL

Я заполнил временный интервал из запроса, и временная таблица выглядит так:

ttcomp.inum
ttcomp.iname
ttcomp.iadd

В этой временной таблице 5000 записей, и теперь я хотел записать в файл CSV. Я думаю, что это можно сделать с output stream, но я не знаю, как это реализовать. Пожалуйста, помогите мне получить это.


person user3427690    schedule 14.05.2014    source источник
comment
Посмотрите на stackoverflow.com/questions / 9359154 /   -  person Austin    schedule 14.05.2014


Ответы (3)


Экспорт делает свое дело:

/* 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 */
person Jensd    schedule 14.05.2014
comment
OP запросил вывод через запятую, а не через точку с запятой. В остальном пример хороший. - person Tim Kuehn; 14.05.2014
comment
@TimKuehn - хорошее замечание. Просто сделал, как я обычно делаю сам. Отредактирую ответ. - person Jensd; 14.05.2014
comment
@Jensd круто, я предпочитаю сделать мой разделитель переменной с установленным начальным значением, так что это одно место прямо в верхней части кода, чтобы изменить разделитель, если кто-то захочет изменить, скажем, на | - person AquaAlex; 19.05.2014
comment
@AquaAlex Это хороший способ сделать это! Я только что привел вам простой пример! :) - person Jensd; 19.05.2014

Есть и альтернативный способ. ЭКСПОРТ хорош, если формат не имеет значения, потому что ЭКСПОРТ игнорирует формат. Например, вы не хотите, чтобы дата была форматом мм / дд / гг. В этом случае лучше использовать PUT STREAM и явно указывать формат.

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

Вот альтернатива без стрима.

/* 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.
person AD.    schedule 28.10.2015