I am using a TFDMemTable to import text data. When processing comma delimited files with double-quoted values an error occurs when the last line in the file does not have a line feed.
To reproduce this problem create a text file with the following values in notepad:
"name","date","amount"
"Alpha","1/1/2021","100"
"Bravo","1/2/2021","200"
"Charlie","1/3/2021","300"
Make sure you save the file with the final cursor at the end of the "Charlie" line.
The following error will occur on BatchMove.Execute;
The error does not occur if double-quote characters are not used.
The error does not occur if you add a line feed so the cursor is on the line after "Charlie" when the file is saved.
myTable := TFDMemTable;
myReader := TFDBatchMoveTextReader;
myWriter := TFDBatchMoveDataSetWriter;
myMover := TFDBatchMove;
procedure Test (const p_FileName: String);
var // --- Added in attemp to bypass the issue
I: Integer; // --- Added in attemp to bypass the issue
begin
myReader.FileName := p_FileName;
for i := 0 to myReader.Datadef.Fields.Count-1 do // --- Added in attemp to bypass the issue
myReader.Datadef.Fields.DataType := atString; // --- Added in attemp to bypass the issue
myReader.DataDef.WithFieldNames := True;
myWriter.DataSet := myTable;
myWriter.Optimise := False;
myMover.Reader := myReader;
myMover.Writer := myWriter;
myMover.GuessFormat;
myMover.Analyze := [taDelimSep, taHeader, taFields];
myMover.AnalyzeSample := 50;
myMover.Execute;
end;
The files being processed are automatically obtained from other systems. We cannot control the presence of the linefeed without modifying the received file. Can you please advise on how to handle this issue?