固定文本文件的动态解析

Dynamic parsing of fixed text files

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

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

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

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

要解析的文件示例:

John William            Hoover23M
Deborah                 Foobar33F
...

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

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

我想做一个通用的解析器,所以这个 类 应该根据一些外部配置文件自动生成和注释。

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

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

谢谢大家!

您不需要 "parse" 大文件。您只需要在给定的位置提取

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

2 打开你的大文件,阅读行,然后提取到你想要的位置。你的速度会更快。

尝试 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"));

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

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