Parsing 使用RowProcessor解析固定宽度文件(Univocity)
我正在处理一个固定宽度的文件,其中包含3种不同类型的bean:Parsing 使用RowProcessor解析固定宽度文件(Univocity),parsing,fixed-width,univocity,Parsing,Fixed Width,Univocity,我正在处理一个固定宽度的文件,其中包含3种不同类型的bean: Bean 1(头):长度=256;从0256Q开始;一个 标题 Bean 2(记录):长度=768;从0768T开始; 可重复 Bean 3(页脚):长度=256;从0256Z开始;一 单页脚 我尝试了许多Univocity选项,但问题是processor.getBeans()方法总是在解析步骤之后为每种类型的bean返回一个空列表 有人能帮我吗 FixedWidthParserSettings settings
- Bean 1(头):长度=256;从0256Q开始;一个 标题
- Bean 2(记录):长度=768;从0768T开始; 可重复
- Bean 3(页脚):长度=256;从0256Z开始;一 单页脚
FixedWidthParserSettings settings = new FixedWidthParserSettings();
settings.setAutoConfigurationEnabled(true);
settings.setHeaderExtractionEnabled(false);
settings.setRecordEndsOnNewline(true);
settings.trimValues(false);
FixedWidthFields header = FixedWidthFields.forParsing(Header0256Q.class);
FixedWidthFields payment = FixedWidthFields.forParsing(Payment0768T.class);
FixedWidthFields footer = FixedWidthFields.forParsing(Footer0256Z.class);
展望未来
settings.addFormatForLookahead("0256Q", header);
settings.addFormatForLookahead("0768T", payment);
settings.addFormatForLookahead("0256Z", footer);
为每种类型的记录创建一个处理器
BeanListProcessor<Header0256Q> headerProcessor = new BeanListProcessor<Header0256Q>(Header0256Q.class);
BeanListProcessor<Payment0768T> paymentProcessor = new BeanListProcessor<Payment0768T>(Payment0768T.class);
BeanListProcessor<Footer0256Z> footerProcessor = new BeanListProcessor<Footer0256Z>(Footer0256Z.class);
解析
FixedWidthParser parser = new FixedWidthParser(settings);
parser.parse(lFile);
吃豆子
List<Header0256Q> headerRecords = headerProcessor.getBeans();
List<Payment0768T> paymentRecords = paymentProcessor.getBeans();
List<Footer0256Z> footerRecords = footerProcessor.getBeans();
List<Header0256Q> headerRecords = headerProcessor.getBeans();
List<Payment0768T> paymentRecords = paymentProcessor.getBeans();
List<Footer0256Z> footerRecords = footerProcessor.getBeans();
Dtazv dtazv = new Dtazv();
dtazv.setHeaderRecord(headerRecords.get(0));
dtazv.setPaymentRecords(paymentRecords);
dtazv.setFooterRecord(footerRecords.get(0));