首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Openedge中导入

在Openedge中导入
EN

Stack Overflow用户
提问于 2017-08-23 16:04:45
回答 2查看 1.6K关注 0票数 1

日安。

在此link中,我有一个先前的问题。在导出的csv中,我将TABLE NAME放在第一行。我希望将此CSV导入我的系统。

我当前的代码是:

代码语言:javascript
复制
DEF VAR ic as INT.
DEF VAR cTable as CHAR.

INPUT FROM VALUE(SESSION:TEMP-DIRECTORY + "temp.csv").

ic = 0.
REPEAT:

    ic = ic + 1.

    IF ic > 1 THEN DO:
        CREATE cTable.
        IMPORT DELIMITER "," cTable.
    END.

    IMPORT cTable.

END.

INPUT CLOSE.

我知道CREATE部件中的代码是错误的。我该怎么做呢?

此外,当我导出时,在最后一条记录之后有一个额外的空行。如何在不打开CSV文件的情况下删除此文件?

EN

回答 2

Stack Overflow用户

发布于 2017-08-23 17:38:21

删除文件末尾的空行并不能解决您的问题,更糟糕的是,如果您这样做了,您将无法使用IMPORT语句读取最后一个有效的CSV行(它需要在末尾有一个空行才能正常工作)。

实际问题是,您在表中得到了一个空行,因为当REPEAT块到达文件末尾时,IMPORT DELIMITER "," cTable.会失败,因为它会引发ENDKEY条件,从而离开循环。但是,由于您在循环结束之前调用了CREATE cTable.,因此会得到一个空条目。我希望这个解释能帮助你理解REPEAT循环是如何工作的,如果你不知道这一点,它看起来就像一个没有任何中断条件的无限循环。

无论如何,要解决这个问题,您可以删除空行(就像您之前所做的那样),这是完全有效的,或者您可以从临时表定义中省略NO-UNDO,因为这样REPEAT将在默认情况下对CREATE执行UNDO操作。

对于你的另一个关于CSV标题行的问题,你必须以某种方式读取该行,我不认为有一个语句可以跳过它,从文件中的2.行开始读取。如果需要标题名称,可以简单地为每一列定义一个char变量并导入它,如下所示:

代码语言:javascript
复制
IMPORT DELIMITER "," cColumn1 cColumn2. /* for every column */

或者,如果您只想阅读并忽略它,您可以使用

代码语言:javascript
复制
IMPORT UNFORMATTED cTemp.

使用读取整行的temp变量。

票数 3
EN

Stack Overflow用户

发布于 2017-08-23 22:03:53

如果您正在尝试导入未知的文件格式,您可能会尝试读取整行数据,然后选择各个字段。至于问题2,最好以编程方式处理不正确的数据,而不是试图更改文件本身。

此代码从文件中读取每一行,跳过任何为空或null的行。然后,它遍历该行中的每个逗号分隔字段并显示它们。

代码语言:javascript
复制
DEFINE VARIABLE cTable AS CHARACTER NO-UNDO.
DEFINE VARIABLE cField AS CHARACTER NO-UNDO.
DEFINE VARIABLE iLoop  AS INTEGER NO-UNDO.

INPUT FROM VALUE(SESSION:TEMP-DIRECTORY + "temp.csv").

REPEAT ON ERROR UNDO, NEXT:

    IMPORT UNFORMATTED cTable.  /* Read an entire line from the file. */

    IF cTable = "" OR cTable = ? THEN NEXT.  /* Skip blank lines. */

    DO iLoop = 1 TO NUM-ENTRIES(cTable, ","):  /* Break up the line by the comma delimiter. */

        cField = ENTRY(iLoop, cTable).
        MESSAGE "Field " + STRING(iloop) + ": " + cField VIEW-AS ALERT-BOX.

    END.

END.

INPUT CLOSE.

由于文件布局未知,因此所有字段都被读取为字符。您需要添加一些逻辑来确定值是否为整数、小数、日期等。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45834036

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档