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

Csv 最后导入的行是空的输入流进度,csv,openedge,progress-4gl,4gl,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.

我制作了一个脚本,用于导入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. 
当我在重复块外显示ttEa时,我得到一个空记录,如下所示:

当我在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.  

转到CSV文件的末尾,按ENTER键,保存它,然后再次运行。不导入最后一行是已知的进度错误,因此请确保它是空白的。如果您的文件结尾没有回车符,您将丢失最后一条记录,这可能就是这里发生的情况

编辑:因为您提到问题是最后一个空记录,而不是没有导入最后一个,所以我在repeat中添加了一个事务,在我的测试中,空记录消失了

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

end.

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

我可能已经问错了,但是最后一行导入不是我需要的。它导入一行到多行。它导入我需要的所有内容,但在csv结束时,他导入了另一行,该行不返回任何信息。这是因为您在导入之前创建。我在一个do事务中附上了导入,现在我似乎已经摆脱了错误记录。我正在编辑我的答案。我想你需要一个关于错误的撤销,在你的重复中留下短语,因为我认为你正在创建一个空白记录,并且循环正在被引发EOF的导入打破。但是,在发生错误的时候,您已经创建了空白记录,除非撤消上次创建,否则您将得到一个空白记录。(这可能是结束键而不是错误-但你明白了)我现在有这个,我仍然得到相同的结果。。。我已经更新了问题。您没有将临时表定义为“无撤消”,是吗?我定义了。然而,在删除了NO-UNDO之后,我仍然得到了相同的结果。非常感谢您的回答!杰出的我知道我很接近。。。只是还没有达到交易要求——我学到了一些新东西!我今天也是D