2013-03-20 123 views
0

我想导出一些数据库记录来创建一个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". 

End方法。

这不工作,并创建一个csv文件与所有需要的记录,但是我想知道如何我可以把标题放入csv文件,因此每个我想让他们说[名称] [成本] [单位]。这是如此,当csv文件在Excel中打开时,列有标题。

有没有人有任何想法如何做到这一点?

回答

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

export delimiter "," "Head1" "Head2" "Head3". 

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

CSV文件是以“,”分隔的,因此您需要将其中的分隔符更改为逗号。 – 2013-03-20 11:54:20

+0

斑点。这就是我发布未经测试的代码的原因。已编辑答案。 – 2013-03-21 10:30:19

0

下面是一些代码提取三个表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. 
+0

抱歉格式不知道为什么格式化丢失 – AquaAlex 2013-05-20 16:55:11

+0

感谢您的编辑 – AquaAlex 2015-11-11 11:04:56