У меня есть файл CSV, который я хотел бы импортировать с семейством компонентов FireDAC BatchMove (TextReader и DataSetWriter).
Пример CSV-данных
Vehicle,State,Toll distance (mi),Distance (mi),Time (hours)
Tr226,VA,0.0,8679.9,142.5
Tr114,VA,0.0,7227.2,151.5
Пример кода
{FDBatchMove, FDBatchMoveTextReader, FDBatchMoveDataSetWriter, and FDMemTable are declared in the Private declarations of my form}
FDBatchMove := TFDBatchMove.Create(nil);
FDBatchMoveTextReader := TFDBatchMoveTextReader.Create(nil);
FDBatchMoveDataSetWriter := TFDBatchMoveDataSetWriter.Create(nil);
FDMemTable := TFDMemTable.Create(nil);
FDBatchMoveTextReader.FileName := 'Y:\Shared\VehicleShort.csv';
FDBatchMoveDataSetWriter.DataSet := FDMemTable;
FDBatchMove.Reader := FDBatchMoveTextReader;
FDBatchMove.Writer := FDBatchMoveDataSetWriter;
FDBatchMove.Analyze := [taDelimSep, taHeader, taFields];
FDBatchMove.AnalyzeSample := 10;
FDBatchMove.Execute;
После выполнения вышеуказанного блока я перебираю FDMemTable и отображаю содержимое первого поля:
FDMemTable.First;
while not FDMemTable.Eof do
begin
ShowMessage(FDMemTable.Fields[0].AsString);
FDMemTable.Next;
end;
И я получаю следующие ответы. Обратите внимание, что последний символ обрезан:
Tr22
Tr11
Если я изменю данные CSV для включения более длинных названий транспортных средств, таких как Truck226 и Truck114, у меня возникнет та же проблема с обрезанным последним символом.
Truck22
Truck11
Я немного растерялся из-за того, что можно сделать здесь. Мне нужно создавать компоненты BatchMove во время выполнения, и демонстрационные версии, поставляемые с Delphi, не достаточно углублены, чтобы я мог решить проблему самостоятельно.