Delphi FireDac TFDBatchMoveTextReader未输入完整字段值

Delphi FireDac TFDBatchMoveTextReader未输入完整字段值,delphi,delphi-10-seattle,firedac,Delphi,Delphi 10 Seattle,Firedac,我有一个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, FDBatchMoveDataSetWrit

我有一个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附带的演示并没有深入到我自己解决问题的程度

csv中的字符串字段不包含分隔符(双引号或单引号),因此必须设置
FDBatchMoveTextReader.DataDef.delimiter:=#0

在FredS发表评论后,我意识到如果我根据我的问题构建项目,它是有效的。这使我意识到我的文件一定有一个特点。我意识到我的文件只有换行符。我用回车换行符替换了所有换行符,它成功了


经过一些研究,我可以使用FDBatchMoveTextReader.DataDef.EndOfLine来控制这种行为

尝试更改为[taDelimSep,taFormatSet,taHeader,taFields]。如果这没有帮助,那么您对日期格式、日期分隔符、小数分隔符的设置是什么?你的德尔福版本是什么?这两个想法似乎都没有奏效。我的Delphi版本(如标签所示)是西雅图。没有安装西雅图,但它在柏林工作。有趣。我决定创建一个全新的txt文件,并从我的SO帖子中复制数据,结果成功了。这告诉我这些文件之间有一些根本的区别。我试着改变编码,但似乎不起作用。如果我只是复制/粘贴数据(使用记事本++)到一个新文件中,它就可以工作了。