Csv 最后导入的行是空的输入流进度
我制作了一个脚本,用于导入CSV文件 但是,当我将其导入临时表时,临时表中的最后一条记录是空的。我已经检查了三倍的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.
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