gpt4 book ai didi

java - Univocity Parser - 如何在已解析的 bean 中获取行号

转载 作者:行者123 更新时间:2023-12-05 06:02:14 25 4
gpt4 key购买 nike

当使用 Univocity FixedWidthParser 时,如何在解析的 bean 中添加记录/行号作为字段?

  1. 是否有一个选项可以将 bean 属性标记为记录号,例如:
   // Bean representing a record
public class MyRecord {

@RecordNumber //like this, record or line number from the context is assigned as value
long recordNumber;

@Parsed
String name;

//other parsed fields
}
}
  1. 我正在使用 InputValueSwitch。有没有一种方法可以在 rowProcessorSwitched() 中获取上下文,以便我可以尝试:
final BeanListProcessor<MyRecord> myProcessor = new BeanListProcessor<MyRecord>(
MyRecord.class);

public void rowProcessorSwitched(RowProcessor from, RowProcessor to) {
ParsingContext context = ... //how to get this?
long lineNumber = context.currentLine(); //if i can get this...
if (from == myProcessor){
(MyRecord)myProcessor.getBeans().get(0).setRecordNumber(lineNumber); //...then this should be possible
//other switch logic
}
}

更新:在 InputSwitch 中,我尝试实现 processStarted

   ParsingContext refToContext = null;

public void processStarted(ParsingContext context) {
refToContext = context;
super.processStarted(context);
}

并在 rowProcessorSwitched() 中使用它,

long lineNumber = refToContext.currentLine() - 1;

这是一种有效的方法吗?它是否可靠 - 尤其是在解析过程中遇到错误时

最佳答案

此解决方案不使用 InputSwitchInputValueSwitch , 但确实生产带有 rowNumber 的 bean 表示行号的属性。

final BeanListProcessor<MyRecord> myProcessor = new BeanListProcessor(MyRecord.class) {

public void beanProcessed(Object bean, Context context) {
bean.setRowNumber(beans.size()); // +/- to adjust for header row(s)
super.beanProcessed(bean, context);
}
}

要触发它,我唯一要做的就是确保将此处理器分配给解析器的设置对象,然后调用 parse()CsvParser 的实例上我已将这些设置分配给它。

CsvParserSettings csvSettings = new CsvParserSettings();
csvSettings.setProcessor(myProcessor);

CsvParser csvParser = new CsvParser(csvSettings);
csvParser.parse();

请注意,我省略了 @Override内部函数的注解。无论出于何种原因,在我的生产实现中,IntelliJ 表示这不会覆盖父类(super class),但测试清楚地表明这是可行的。我使用 IntelliJ 的“生成”选项来 stub 这个方法,所以谁知道......

另请注意,我的生产代码是在 Groovy 中,所以请原谅任何语法问题;我正在头脑中转换为 Java。

关于java - Univocity Parser - 如何在已解析的 bean 中获取行号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66977292/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com