在C#中读取/解析.ddd(数字行车记录仪)文件到XML

时间:2015-06-26 06:49:40

标签: c# file-conversion

我对C#相当陌生,需要将uksort($array1, function($a, $b)use($array2) { foreach($array2 as $value){ if($a == $value){ return 0; break; } if($b == $value){ return 1; break; } } }); digital tachograph输出文件扩展名)转换为.ddd

作为第一步,我应该阅读文件,所以我正在查看示例。我发现的每个信息源都在阅读文件时使用基于.xml的示例。我的示例中的文件类型.txt远不及那个。

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

3 个答案:

答案 0 :(得分:4)

答案非常晚,但此库位于C#中,支持数字行车记录仪规格的大部分内容。

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

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

自述文件:

用法非常简单。有一个主类DataFileReader和两个子类:VehicleUnitDataFile和DriverCardDataFile。您可以使用以下方法创建其中一个子类的实例:

Clothes

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

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

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

答案 1 :(得分:3)

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

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

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

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

  • SPACE 字符
  • 32
  • 该字节可以是具有完全不同值的UInt16的第一个字节
  • "下一个数据块长度为32个字节"
  • "第一个数据块可以在偏移32"
  • 找到
  • "下一个数据块是元数据" (此字节表示某种块类型
  • 墙上有32瓶啤酒

如果没有关于每个位置的每个字节的含义的信息,那么您将无法获得任何结果。

然后使用该信息,并将文件读入某些拟合类,转换为Xml可以像将类传递给XmlSerializer一样简单。

答案 2 :(得分:0)

也有现成的解决方案,例如ReadESM(https://sourceforge.net/projects/readesm/files/)或DDD2XML(https://rs.canlab.cz/?q=en/node/154)。 DDD2XML还支持第二代转速表。