是否有一个标准格式,用于描述一个平面文件?
-
21-09-2019 - |
题
是否有一个标准或开放的格式,它可被用来描述格式化的一个平面文件。我的公司集许多不同的客户文件的格式。有XML文件很容易得到,或者创建一个文件描述XML文件格式。我在寻找类似的东西来描述一个平面文件格式(固定的宽度,分隔等)。笔室使用一个专用的。conv格式做到这一点。那。conv格式可以是在运行时使用改变任意一个平面文件,以XML文件。我只是想知道是否有任何更开放的或基于标准的方法做同样的事情。
我在寻找一种方法的描述各种各样的文件格式是否是固定的宽度或定界,所以CSV不是回答这个问题。
解决方案
XFlat: http://www.infoloom.com/gcaconfs/WEB/philadelphia99/ lyons.HTM#N29 http://www.unidex.com/overview.htm
有关复杂的情况下(例如,日志文件),可以考虑一个词法分析器。
其他提示
关于 现有的选择 平面文件的格式: 还有就是 逗号分隔值 (CSV)的格式。或者更一般地说, 了.但这些都不是"固定宽度的",因为有一个分隔符(例如一个逗号)分开的单个细胞。请注意,虽然CSV 标准化, 不是每个人都坚持的标准。此外,CSV可以是简单的你的目的,因为它不允许一个丰富的文件结构。
在这方面,标准化的并且仅略微更复杂的(但从而更加有用)的格式 JSON 和 其 是更好的选择。两者都支持的框通过多种语言。
最好的办法是看一看所有的语言列为非二进制的 这一概述 然后确定最适合你。
关于 描述 平面文件的格式: 这可能是非常简单或困难的,根据该格式。虽然在大多数情况下更容易解决方案的存在,一种方法,将工作一般是要查看文件的格式 正式的语法, 和写 语法分析程序/分析器 为。但我承认,这是相当† 重型机械。
如果你幸运的话,几个先进的 经常表达式 可能做到。大多数格式不会借给自己,但是。‡ 如果你打算编写一语法分析程序/分析器自己,我可以告诉 帘布层 (Python Lex-Yacc).但许多其他的解决方案的存在,在许多不同的语言,他们中的很多更便于老学校 Lex&Yacc.更多,看到的 什么样的分析器生你建议?
†:是的,这可能是一个轻描淡写。
‡:甚至正确地描述 电子邮件地址格式 不是微不足道的。
COBOL(不管你喜欢还是不喜欢)具有用于描述在文件中的固定宽度的记录格式的标准格式。
其他的文件格式,然而,有些简单描述。 CSV文件,例如,仅仅是一个字符串列表。经常CSV文件的第一行是列名 - 这就是描述
有使用JSON制订文本文件的元数据的例子。这可以适用于JSON文件,CSV文件和固定格式的文件。
在 HTTP查找://www.projectzero.org/sMash/1.1.x/docs/zero.devguide.doc/zero.resource/declaration.html
这是使用JSON来编码元数据IBM的sMash的(Zero项目)。您可以轻松地将此应用到平面文件。
在一天结束的时候,你可能会来定义自己的文件的标准,满足具体地说到你的存储需求。我的建议是使用xml,其函作为您的内部容器的所有文件类型。上这个,你会需要执行一些额外的验证逻辑维持元数据,例如列大小的固定宽度的文件(为进口和出口的固定宽度)。或者,可以储存或连接一个集的元数据对每个文件转换为内部的格式。
有可能是一个标准在那里,但这太难以创建'一刀切'的解决方案对于这些问题。有实体关系管理工具(Talend,其他人),使创建这些映射更容易,但是你仍然需要花费很多时间保持文件格式的定义和规则。
作为执行列宽度,xml可能是最好的解决方案为你可以描述的格式采用xml模式(与长度的限制).对于其函,你可能得写自己的逻辑为此,虽然我敢肯定,其他人已经想出了一个解决方案。
看看 XML vs逗号分隔的文本的文件 为进一步参考。
我知道的唯一类似的事情是Hachoir,其可以解析目前70种的文件格式:
http://bitbucket.org/haypo/hachoir/wiki/Home
我不知道它是否真的算作一个说明性语言,因为它的插件解析器为主,但似乎工作,并且是可扩展的,这可能满足您的需求就好了。
顺便说一句,有有趣标准化,可扩展的平面文件格式,如IFF(交换文件格式)。