【发布时间】:2011-10-05 02:27:18
【问题描述】:
我需要将复杂(非固定长度)的 csv 文件解析为 Java 对象,以便比较其值。 我首先尝试了 Flatform Parsing Framework,我喜欢在额外的 (xml) 文档中描述值的方法。也许它是简单 csv(以及平面)文件的正确工具。然而,我的 csv 文件包含字段数量不同的行 - 有时它们跨越多行。这些字段之间也存在依赖关系。
这里有一个小例子:(每种类型都有一定数量的额外参数)
; <COMMENTS (to be ignored)>
<NAME>,<TYPE_A>,<DESCRIPTION>,<PARAMETER>
<NAME>,<TYPE_B>,<DESCRIPTION>,<PARAMETER>,<PARAMETER>
<NAME>,<TYPE_C>,<DESCRIPTION>,<PARAMETER>,<PARAMETER>,<PARAMETER>,<PARAMETER>
<NAME>,<TYPE_D>,<DESCRIPTION>,<PARAMETER>,<PARAMETER>,<PARAMETER>,<PARAMETER>, -
<PARAMETER>,<PARAMETER>, -
<PARAMETER>,<PARAMETER>
<NAME>,<TYPE_B>,<DESCRIPTION>,<PARAMETER>,<PARAMETER>
<NAME>,<TYPE_A>,<DESCRIPTION>,<PARAMETER>
所以我需要一些东西来以更复杂的方式描述和解析 csv 文件。我是新手,我听说过解析器生成器 - 这是我需要的吗?
【问题讨论】:
-
有完整的 java 解析器框架(实际上,这是一个很大的轻描淡写,但适合这里) - 看看antlr.org
-
我的同事曾经为 boost.spirit 框架 (C++) 编写语法。我需要检查 Java 等价物。 ANTLR 似乎是一个绝佳的机会——我猜这很复杂。
-
你有
-作为行延续和 cmets 的事实,使它不适合 CSV 解析器。您必须重写现有的 CSV 解析器来解释它们,在这种情况下,我只需编写一个小语法并让 JavaCC 或 ANTLR 生成解析器。 -
@Bart:你对 ANTLR 有经验吗?是否有任何示例如何将文本解析为 Java 对象?
-
@mamuesstack,是的,我对 ANTLR 了解一些。您能否编辑您的原始问题并解释一下您要创建的对象类型?每行有不同数量的
<PARAMETER>s 是不同的对象吗?
标签: java csv text-parsing