导入/导出数据到正在进行的csv文件4gl

时间:2014-04-04 06:11:11

标签: csv progress-4gl

我有csv文件。我需要阅读它。使用它在数据库中查找和显示一些数据。 之后,我需要将收集的数据导出到csv输出文件。 这是我的代码:

/**********  DEFINE TABLES  **********/
DEFINE TEMP-TABLE TT
    FIELD AAA20 AS CHAR
    .

DEFINE TEMP-TABLE RES-T
    FIELD CIF       AS CHAR label "номер клиента"
    FIELD NAME      AS CHAR label "имя клиента"
    FIELD TEL       AS CHAR label "телефон 1"
    FIELD TLX       AS CHAR label "телефон 2"
    FIELD FAX       AS CHAR label "сот. телефон"
    FIELD AAA20     AS CHAR label "номер счета"
    .

/**********  DEFINE QUERIES  **********/
DEFINE QUERY Q1 FOR TT, AAA, CIF.

/**********  DEFINE WIDGETS  **********/
DEFINE BROWSE B1 QUERY Q1 
/*FOR EACH AAA, EACH CIF OF AAA:*/
    DISPLAY CIF.CIF       label "номер клиента"
        CIF.NAME      label "имя клиента"
        CIF.TEL       label "телефон 1"
        CIF.TLX       label "телефон 2"
        CIF.FAX       label "сот. телефон"
        AAA.AAA20     label "номер счета" WITH 25 DOWN SEPARATORS
        .

DEFINE BUTTON BTN-EXIT LABEL "EXIT".

/**********  DEFINE FRAMES  **********/
DEFINE FRAME F1 
    B1 AT ROW 1 COLUMN 2
    BTN-EXIT AT ROW 1 COLUMN 1
        WITH NO-BOX CENTERED.

/**********  MAIN LOGIC  **********/
INPUT FROM VALUE("Education/TRIUMF.csv").
REPEAT:
    CREATE TT.
    IMPORT DELIMITER "," TT.
END.
INPUT CLOSE.

OPEN QUERY Q1 FOR EACH TT,
        EACH AAA OF TT,
        EACH CIF OF AAA.

OUTPUT TO VALUE("MYCSV.CSV").
FOR EACH RES-T:
    EXPORT DELIMITER "," RES-T
END.
OUTPUT CLOSE.

ENABLE ALL WITH FRAME F1.
WAIT-FOR CHOOSE OF BTN-EXIT.

但是,有很多问题。我是新进步的4gl。任何人都可以帮忙吗?

1 个答案:

答案 0 :(得分:4)

这是关于IMPORT的帮助说明:

IMPORT声明

从可能由EXPORT创建的输入文件中读取一行。

语法

IMPORT 
[ STREAM stream | STREAM-HANDLE handle ]  
[ DELIMITER character ] 
[    record [         EXCEPT field  ... ]     | UNFORMATTED field   ]
[ NO-LOBS ]  [ NO-ERROR ].

专注于这一行

[    record [         EXCEPT field  ... ]     | UNFORMATTED field   ]

基本含义:

使用UNFORMATED可以将IMPORT与整个记录一起使用(可能使用EXCEPT从该记录中排除字段)或者使用UNFORMATED对特定字段(记录或变量)。

你做的是这个:

IMPORT DELIMITER "," TT.

这意味着Progress将读取输入源的一行,使用逗号(,)分隔它,然后将每个分隔的字符串放入名为TT的临时表的一个字段中。

在您的情况下,TT只有一个字段(aaa20)。该字段将包含文件中的第一个分隔字符串。如果文件在每行上有更多分隔的字符串,则数据将丢失。

你可以做两件事:

1)向temp-table添加更多字段。这将填充更多数据的字段。您不需要更改导入语句。

DEFINE TEMP-TABLE TT
    FIELD AAA20 AS CHAR
    FIELD secondfield AS CHAR
    FIELD thirdfield  AS CHAR.
    /* etc and you most likely want other names */

2)将整行导入字段(从而删除分隔符)。这会将整行放入同一个字段(AAA20)。这很可能不是你想要做的。然后,TT的AAA20将包含整行(使用逗号分隔符和所有其他行)。

IMPORT UNFORMATTED TT.