Reading/Parsing .ddd(数字行驶记录仪)文件到 XML 在 C# 中

Reading/Parsing a .ddd (digital tachograph) file to XML in C#

顺便说一句,我是 C# 的新手,需要将 .ddddigital tachograph 输出文件扩展名)转换为 .xml

作为第一步,我应该阅读该文件,所以我正在查看示例。我找到的每个信息源都使用基于 .txt 的示例来读取文件。我的示例中的文件类型 .ddd 与此相去甚远。

我正在考虑二进制读取,但也不确定。正确的方法是什么?

要执行您需要知道的转换:

  • 如何从文件中读取二进制数据
  • 文件可以包含的确切内容(每个字节)
  • Xml
  • 中的所需输出

从文件中读取二进制数据相当简单 - BinaryReader 有各种方法来访问数据,特别是如果数据可以在单个前向传递中处理(这似乎是这种情况).那里有很多 BinaryReader 个例子。

更重要的是了解数据的含义。值为 0x20 的单个字节可能表示:

  • SPACE
  • 价值32
  • 该字节可能是具有完全不同值
  • UInt16的第一个字节
  • "The next block of data is 32 bytes long"
  • "The first block of data can be found at offset 32"
  • "The next block of data is metadata"(这个字节表示某种块类型
  • 32瓶啤酒在墙上

如果没有关于每个位置的每个字节的含义的信息,您将一事无成。

然后使用该信息,并将文件读入某种合适的 class(es),转换为 Xml 就像将 class 传递给 XmlSerializer.

很晚才回答,但这个库是用 C# 编写的,支持数字行驶记录仪规范的大部分内容。

https://github.com/jugglingcats/tachograph-reader

该库提供了两个 class 可以读取驱动程序和车辆卡二进制文件并写入 XmlWriter 的程序。 XML 结构良好,为后续处理提供了二进制文件内容的清晰表示。请注意,代码不会检查文件中的数字签名。

来自自述文件:

用法很简单。有一个主 class DataFileReader 和两个子 classes:VehicleUnitDataFile 和 DriverCardDataFile。您可以使用以下方法创建子类之一的实例:

DataFile vudf=VehicleUnitDataFile.Create();
DataFile dcdf=DriverCardDataFile.Create();

一旦你有了一个 reader 实例,你可以给它一个二进制文件来读取和一个 XML 写入器:

vudf.Process("file.ddd", writer);

这两种数据文件格式中的大多数 sections/features 都适用。可以使用 DriverCardData.config 和 VehicleUnitData.config 修改数据文件格式。这是两个 XML 文件,定义了具有特定于标准的功能(例如循环缓冲区支持)的数据结构。

也有现成的解决方案,比如ReadESM(https://sourceforge.net/projects/readesm/files/) or DDD2XML (https://www.canlab.cz/en/DDD2XML)。 DDD2XML也支持二代行车记录仪