Reputation: 524
I have made a script that does an import of an CSV file.
It work perfect however when I import it into a temp table the last record in my temp table is an empty one. I've tripled checked the CSV and it doesn't contain any empty lines.
This is my code:
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.
When I display the ttEa outside of the REPEAT block I get an empty record like this:
When I display ttEa inside the REPEAT block I don't get an empty record.
Can somebody please help me?
Using this still gives me the same result:
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.
Upvotes: 3
Views: 1827
Reputation: 1498
Go to the end of your CSV file and hit ENTER, save it, run again. It's a known bug for Progress to not import the last line, so make sure it's a blank one. If your file doesn't have a carriage return at the end, you're going to lose the last record, which is probably what's happening here.
Edit: Since you mentioned the problem was the empty record at the very end, rather than not importing the last, I added a transaction to the repeat and in my tests, the null record is gone.
repeat transaction:
create ttEa.
import stream sEaImport delimiter ';' ttEa.
end.
Upvotes: 1
Reputation: 1217
Make sure your temp table does NOT have the NO-UNDO
statement on it. Then change the REPEAT
statement to REPEAT TRANSACTION
. The last iteration will try to create a ttEa record but fail. Since it's now in a transaction, the create will be undone (which is why you can't have NO-UNDO
on the temp table) and the blank record will be gone.
Upvotes: 2