1

我想为固定位置的文本文件构建一个解析器。

我想要实现的是使其动态化,以便我可以传递一个包含将被解析的文件格式的外部配置文件。

使应用程序加载的配置文件示例:

Field; Position
Name;0-20
Surname;21-40
Age;40-42
Sex;42-43
...

要解析的文件示例:

John William            Hoover23M
Deborah                 Foobar33F
...

我看到谷歌搜索了很多库来解析固定长度的文件。

问题是它们都依赖于创建一些带有注释字段的类,这些字段告诉文本文件中的固定位置。

我想制作一个通用解析器,因此应该根据一些外部配置文件自动生成和注释这些类。

你知道我可以遵循的任何图书馆或不同类型的方法吗?

我说的是解析大约 500Mb 左右的相对较大的文件,因此效率和速度也是重要因素。

谢谢你们!

4

2 回答 2

0

您不需要“解析”大文件。您只需要在给定位置提取

1 使用经典正则表达式解析“格式”文件,并将名称、位置存储在数组中。时间在那里并不重要。

2 打开你的大文件,读取行,并在你想要的位置提取。这将是你能做的越快。

于 2015-12-04T13:52:48.273 回答
0

试试uniVocity-parsers的 FixedWidthParser:

    //define field lengths
    FixedWidthFields fields = new FixedWidthFields();
    accountFields.addField("ID", 10); 
    accountFields.addField("Bank", 8);
    accountFields.addField("AccountNumber", 15);
    accountFields.addField("Swift", 12);

    //configure the parser
    FixedWidthParserSettings settings = new FixedWidthParserSettings(fields); //many options here, check the tutorial
    settings.getFormat().setLineSeparator("\n");

    //We can now parse all rows
    FixedWidthParser parser = new FixedWidthParser(settings);
    List<String[]> rows = parser.parseAll(new File("/path/to/file.txt"));

这只是一个粗略的例子。这里还有很多其他的例子。

披露:我是这个库的作者,它是开源和免费的(Apache 2.0 许可证)

于 2016-06-24T09:52:07.087 回答