【问题标题】:FireDac TFDBatchMoveTextReader not bringing in the full field valueFireDac TFDBatchMoveTextReader 没有引入完整的字段值
【发布时间】:2019-10-23 23:21:54
【问题描述】:

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

【问题讨论】:

  • 没有安装西雅图,但这在柏林有效。
  • 有趣。我决定创建一个全新的 txt 文件并从我的 SO 帖子中复制数据并且它有效。所以这告诉我文件本身之间存在一些根本区别。我尝试更改编码,但这似乎不起作用。如果我只是将数据(使用记事本++)复制/粘贴到一个新文件中,它就可以工作。

标签: delphi delphi-10-seattle firedac


【解决方案1】:

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

【讨论】:

  • 尝试更改为 [taDelimSep, taFormatSet, taHeader, taFields]。如果这没有帮助,那么您对日期格式、日期分隔符、小数分隔符的设置是什么?你的 Delphi 版本是什么?
  • 这些想法似乎都没有成功。我的 Delphi 版本(如标记)是西雅图。
【解决方案2】:

在 FredS 发表评论后,我意识到如果我根据我的 SO 问题构建项目,它会起作用。这使我意识到我的文件必须具有特殊性。我意识到我的文件只有换行符。我用回车\换行替换了所有换行,它起作用了。

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

【讨论】:

    猜你喜欢
    • 2021-03-05
    • 2018-03-14
    • 1970-01-01
    • 1970-01-01
    • 2016-09-10
    • 2012-07-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多