Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
复杂CSV文件的Java解析框架_Java_Csv_Text Parsing - Fatal编程技术网

复杂CSV文件的Java解析框架

复杂CSV文件的Java解析框架,java,csv,text-parsing,Java,Csv,Text Parsing,我需要将复杂(非固定长度)的csv文件解析为Java对象,以便比较其值。 我首先尝试了扁平解析框架,我喜欢在额外(xml)文档中描述值的方法。也许它是简单csv(以及平面)文件的正确工具。尽管如此,我的csv文件包含的行在字段数量上有所不同,有时它们跨越多行。这些字段之间也存在依赖关系 下面是一个小示例:(每个类型都有一定数量的额外参数) ; ,,, ,,,, ,,,,,, ,,,,,,, - ,, - , ,,,, ,,, 因此,我需要一些东西来以更复杂的方式描述和解析csv文件。我是新手,

我需要将复杂(非固定长度)的csv文件解析为Java对象,以便比较其值。 我首先尝试了扁平解析框架,我喜欢在额外(xml)文档中描述值的方法。也许它是简单csv(以及平面)文件的正确工具。尽管如此,我的csv文件包含的行在字段数量上有所不同,有时它们跨越多行。这些字段之间也存在依赖关系

下面是一个小示例:(每个类型都有一定数量的额外参数)

;
,,,
,,,,
,,,,,,
,,,,,,, -
,, -
,
,,,,
,,,

因此,我需要一些东西来以更复杂的方式描述和解析csv文件。我是新手,听说过parser generator——这就是我需要的吗?

一个选项是使用Scanner类,或者您可能想查看Spring批处理。我从来没有真正使用过SB,但如果批处理作业经常从简单的文本文件中读取,我相信我阅读它就是为了满足这一需求,包括各种对象映射。

试试(请参阅)。它处理嵌入的回车很好。

您也可以尝试一下

这里有一个完整的java解析器框架(实际上,这是一个非常保守的说法,但适合这里)——看看我的同事们,他们曾经为boost.spirit框架(C++)编写语法。我需要检查一个Java等价物。ANTLR似乎是一个完美的机会——我想也是一个复杂的机会。事实上,
-
充当行的延续和注释,这使得它不适合CSV解析器。您必须重写现有的CSV解析器来解释它们,在这种情况下,我只需编写一个小语法,让JavaCC或ANTLR生成一个解析器。@Bart:您对ANTLR有经验吗?有没有关于如何将文本解析为Java对象的示例?@mamuesstack,是的,我对ANTLR略知一二。你能编辑一下你原来的问题,解释一下你想创建什么类型的对象吗?每行都有不同数量的
s是不同的对象吗?嗯,文档很糟糕,只有一些标准示例。多行的解析工作正常。但是我猜我的csv文件变化很大,所以我还需要检查解析器生成器(例如ANTLR)。我很好奇:你到底为什么需要解析器生成器?我的意思是,我理解如果你想要一个解析器生成器,但需要是一个强有力的词。它们是CSV文件。它们是由一些程序生成的。程序的功能是有限制的(我假设它是一个正常的程序),它只是CSV值的变化。在如何处理单行上存在例外情况。例如,对于OpenCSV,我不知道如何识别跨越多行的字段,这些行之间带有“-”(减号)(示例的第5行)。一个字段总是由“,”关闭,整个字段由CR设置。正如前面提到的:文档不是这样的helpful@Femi,我快速查看了OpenCSV,但找不到解释注释行(
;…\n
)或指示应将
-\n
视为行继续的方法。好了,这个输入不是CSV。最后我用Scanner类和一些RegExp创建了自己的解决方案。谢谢Japaki听起来很有趣。最后,我使用Scanner类和适当的regexp来解析文件。下一次,我一定要试试Japaki
    ; <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>