固定文本文件的动态解析
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 许可证)
我想为固定位置的文本文件构建一个解析器。
我想要实现的是让它动态化,这样我就可以传递一个包含将被解析的文件格式的外部配置文件。
使应用程序加载的配置文件示例:
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 许可证)