Gaetano Herman
Gaetano Herman

Reputation: 524

Last Imported Line Is Empty Input Stream Progress

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:

enter image description here

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

Answers (2)

bupereira
bupereira

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

TheDrooper
TheDrooper

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

Related Questions