Создать файл CSV из данных о ходе выполнения

Я пытаюсь экспортировать запись из базы данных для создания файла CSV. Следующий код создает файл CSV:

МЕТОД ЧАСТНЫЙ НЕДЕЙСТВИТЕЛЬНЫЙ GenerateCSV ():

    OUTPUT TO VALUE ("c:users\mark\test.csv").

    FOR EACH a-table WHERE a-table.id = 1: 

          EXPORT DELIMITER ',' a-table.name a-table.cost a-table.unit.

    END. 

    OS-COMMAND NO-WAIT "c:\users\mark\test.csv". 

КОНЕЦ МЕТОДА.

Это работает и создает файл csv со всеми необходимыми записями, однако я хочу знать, как я могу поместить заголовки в файл csv, поэтому для каждого я хочу, чтобы они говорили [Имя] [Стоимость] [Единица]. Это так, когда файл csv открывается в Excel, столбцы имеют заголовки.

Есть у кого-нибудь идеи, как это делается?


person Mark    schedule 20.03.2013    source источник


Ответы (2)


Вот код для извлечения трех таблиц в 3 разных файла CSV и настройки пути, который они будут писать, в зависимости от того, запускаете ли вы в Windows или unix. Имя файла также создается во время выполнения.

запись заголовка создается с записями, разделенными запятыми (используйте вставку поля базы данных и исключите имя таблицы, затем просто введите разделитель между ними :-)

У меня также есть файл журнала, который можно использовать для записи любых ошибок и т. Д., Если это необходимо.

В случае ошибок файлы закрываются в блоке finally.

DEFINE VARIABLE cLogPathFile       AS CHARACTER NO-UNDO.
DEFINE VARIABLE cDataPathFile      AS CHARACTER NO-UNDO.
DEFINE VARIABLE cLogOutputPath     AS CHARACTER NO-UNDO.
DEFINE VARIABLE cDataOutputPath    AS CHARACTER NO-UNDO.

DEFINE BUFFER tbl_1       FOR tbl_1.
DEFINE BUFFER tbl_2       FOR tbl_2.
DEFINE BUFFER tbl_3       FOR tbl_3.

DEFINE NEW SHARED STREAM sm_log_file.
DEFINE NEW SHARED STREAM sm_tbl1.
DEFINE NEW SHARED STREAM sm_tbl2.
DEFINE NEW SHARED STREAM sm_tbl3.

IF OPSYS = "UNIX" THEN 
  DO:
    cDataOutputPath = "/Data/Out/".
    cLogOutputPath  = "/Data/".
  END.
ELSE
  DO:
    cDataOutputPath = "T:~\Data~\Out~\".
    cLogOutputPath  = "T:~\Data~\".
  END.

ASSIGN cLogPathFile = cLogOutputPath  + "myfile_" + STRING(TODAY,"999999") + "_" + STRING(TIME,"999999") + ".log" NO-ERROR.
{ mip/inc/mipreturnerror.i }
ASSIGN cDataPathFile = cDataOutputPath  + "myfile_" + "[Report Name]" + "_" + STRING(TODAY,"999999") + "_" + STRING(TIME,"999999") + ".csv" NO-ERROR.
{ mip/inc/mipreturnerror.i }

OUTPUT STREAM sm_log_file TO VALUE(cLogPathFile). 
OUTPUT STREAM sm_tbl1     TO VALUE(REPLACE(cDataPathFile, "[Report Name]", "tbl_1")). 
OUTPUT STREAM sm_tbl2     TO VALUE(REPLACE(cDataPathFile, "[Report Name]", "tbl_2")). 
OUTPUT STREAM sm_tbl3     TO VALUE(REPLACE(cDataPathFile, "[Report Name]", "tbl_3")). 

 PUT STREAM sm_tbl1 "category_obj,created_datetime,effective_date,lookup_column_heading,owning_entity_mnemonic,owning_obj,user_key,user_mnemonic,user_obj,worksheet_description,worksheet_name,worksheet_obj" SKIP.
 PUT STREAM sm_tbl2 "column_data_type,column_heading,column_number,column_obj,worksheet_obj" SKIP.
 PUT STREAM sm_tbl3 "cell_character_value,cell_date_value,cell_numeric_value,cell_text_value,column_heading,lookup_character_value,lookup_date_value,lookup_numeric_value,row_number,value_obj,worksheet_obj" SKIP.

FOR EACH tbl_1 NO-LOCK:
    EXPORT STREAM sm_tbl1 DELIMITER "," tbl_1.category_obj tbl_1.created_datetime tbl_1.effective_date agm_worksheet.lookup_column_heading tbl_1.owning_entity_mnemonic tbl_1.owning_obj tbl_1.user_tbl_1.user_mnemonic tbl_1.user_obj tbl_1.worksheet_description tbl_1.worksheet_name tbl_1.worksheet_obj.

    FOR each tbl_2 NO-LOCK WHERE tbl_2.worksheet_obj = tbl_1.worksheet_obj.
      EXPORT STREAM sm_tbl2 DELIMITER "," tbl_2.column_data_type tbl_2.column_heading tbl_2.column_number tbl_2.column_obj tbl_2.worksheet_obj.
    END.

    FOR each tbl_3 NO-LOCK WHERE tbl_3.worksheet_obj = tbl_1.worksheet_obj:
        EXPORT STREAM sm_tbl3 DELIMITER "," tbl_3.cell_character_value tbl_3.cell_date_value tbl_3.cell_numeric_value tbl_3.cell_text_value tbl_3.column_heading tbl_3.lookup_character_value tbl_3.lookup_date_value tbl_3.lookup_numeric_value tbl_3.row_number tbl_3.value_obj tbl_3.worksheet_obj.
    END.
END.

FINALLY:
    OUTPUT STREAM sm_log_file CLOSE. 
    OUTPUT STREAM sm_tbl1     CLOSE. 
    OUTPUT STREAM sm_tbl2     CLOSE. 
    OUTPUT STREAM sm_tbl3     CLOSE. 
END FINALLY.
person AquaAlex    schedule 20.05.2013

person    schedule
comment
Файлы CSV имеют разделители, поэтому вам необходимо заменить в них разделитель на запятую. - person Tim Kuehn; 20.03.2013
comment
Хорошо подмечено. Вот что я получаю за публикацию непроверенного кода. Отредактировали ответ. - person Gordon Robertson; 21.03.2013