最后导入的行是空输入流进度

时间:2017-11-07 13:36:19

标签: csv openedge progress-4gl 4gl

我制作了一个导入CSV文件的脚本。

它工作正常但是当我将它导入临时表时,临时表中的最后一条记录是空的。我已经三倍检查了CSV并且它不包含任何空行。

这是我的代码:

INPUT STREAM sEaImport FROM VALUE(cCsvEaFileLocation).
/* Skip first line to remove the headers */
IMPORT STREAM sEaImport DELIMITER ";" vcline.
REPEAT:
    CREATE ttEa.
    IMPORT STREAM sEaImport DELIMITER ";" ttEa.
END.
INPUT CLOSE.

FOR EACH ttEa:
    DISPLAY ttEa.
END. 

当我在REPEAT块之外显示ttEa时,我得到一条空记录,如下所示:

enter image description here

当我在REPEAT块中显示ttEa时,我没有得到空记录。

有人可以帮帮我吗?

使用它仍然可以得到相同的结果:

INPUT STREAM sEaImport FROM VALUE(cCsvEaFileLocation).
/* Skip first line to remove the headers */
IMPORT STREAM sEaImport UNFORMATTED vcline.
REPEAT on error undo,leave on endkey undo,leave:
    CREATE ttEa .
    IMPORT STREAM sEaImport DELIMITER ";" ttEa. 
END.

INPUT STREAM sEaImport CLOSE.  

2 个答案:

答案 0 :(得分:2)

确保您的临时表上没有NO-UNDO语句。然后将REPEAT语句更改为REPEAT TRANSACTION。最后一次迭代将尝试创建ttEa记录但失败。由于它现在处于事务中,因此创建将被撤消(这就是为什么临时表上不能有NO-UNDO)并且空白记录将消失。

答案 1 :(得分:1)

转到CSV文件的末尾并按Enter,保存,再次运行。对于Progress来说,导入最后一行是一个已知的错误,因此请确保它是空白的。如果你的文件最后没有回车符,你将丢失最后一条记录,这可能就是这里发生的事情。

编辑:既然你提到问题是最后的空记录,而不是导入最后一个,我在重复中添加了一个事务,在我的测试中,空记录消失了。

repeat transaction:
    create ttEa.
    import stream sEaImport delimiter ';' ttEa.

end.