0

我们以平面文件的形式接收大量数据:分隔或只是固定长度的记录。有时很难找出文件实际包含的内容。

是否有任何成熟的做法可以将文件的架构嵌入到文件的开头或结尾以使文件不言自明?

只是为了得到一个想法,想象一下这样的事情:

<data name=test records=2 type=fixed>
   <field name=foo start=0 length=2 type=numeric>
   <field name=bar start=2 length=4 type=text>
</data>
11test
12ing 

我们将在开始时解析 xml 并将其用于读取记录。

4

3 回答 3

1

您是否从Protocol Buffers中寻找灵感?

于 2010-03-21T17:59:43.637 回答
1

据我所知,没有——或者至少不是很大。

我唯一知道的(就广泛接受的标准而言)是数据文件的第一行是列名 - 至少对于分隔记录,固定长度更难,特别是如果您的数据可以包含多个记录类型(我发现固定长度比定界更有可能)。

从我坐的位置,我建议您不能真正将定义嵌入到文件中,我假设您从外部来源获取数据,因此您不太可能从他们那里获得帮助,即使您立即创建挑战,因为您无法(例如)在必要时使用 Excel 轻松打开文件。

横向思考一下,如果使用 XML,您可以将文件嵌入到定义中(CDATA 的大块)。这是一个稍微实用的解决方案,因为它对您的外部数据进行了包装,而不是要求修改数据本身。不知道这有多实用——但对我来说感觉比反过来要好。

于 2010-03-21T18:19:09.713 回答
0

我不知道任何既定的做法,但你只是将模式添加到数据的想法似乎很好。Apache Avro 是一个类似于 Protocol Buffers 和 Thrift 的数据序列化工具。我相信典型的 Avro 用法涉及将模式与数据一起存储(我猜是通过在流中添加它)。

我还想提一下PADS 项目。它们有一种模式语言,旨在让您描述“临时”数据格式。目前我相信他们只有 C 和 ML 实现,这可能是个问题。另一方面,他们的模式语言被设计为处理多种格式,因此在您自己的基于 XML 的东西上使用它可能仍然值得。

于 2011-04-04T07:23:47.887 回答