Univocity 解析器 - 迭代器方式生成 scala 案例 类
Univocity parser - Iterator way generating scala case classes
使用Univocity框架做自定义解析需求。我们有一个迭代器通过调用 parseNext() 将每一行输出为一个事件,我们不想使用 "parse(File file)" .
我们将这个 Scala 案例 class 作为最终输出,但目前我们正在处理解析器的输出并使用工厂 class 来创建 Scala 案例 classes。
是否有迭代器方式从 univocity 生成 case class 对象(我确实找到了 BeanListProcessor 但它不适用于迭代器方式)?
答案可以在 Java 或 Scala 中..
谢谢,
R
def parseRecord(field: Array[String], univocityContext: Option[ParsingContext]): Option[lineEvent] = {
val parsingContext = univocityContext.get
val parsedEvent = new ParsedEventConstructor()
for ((index, counter) <- parsingContext.extractedFieldIndexes().zipWithIndex){
val columnHeader = parsingContext.headers()(index)
columnHeader match {
case "header1" => {
parsedEvent.parsedheader1 += field(counter)
}
case "header2" => {
parsedEvent.parsedheader2 += field(counter)
}
case _ => parsedEvent.parsedOtherValues += field(counter)
}
}
Some(parsedEvent.getParsedEvent())
}
uniVocity-parsers 有一个 BeanProcessor
(名称中没有 "List"),它将每个解析的 bean 提交给您需要实现的 "beanProcessed" 回调方法。 BeanListProcessor
只是一个方便的 class 扩展 BeanProcessor
以将每个对象添加到列表中,它不是获取对象的唯一方法。
您还可以使用 CsvRoutines
对象及其 iterate
方法来迭代 bean,而无需使用上述回调。检查 this example.
使用Univocity框架做自定义解析需求。我们有一个迭代器通过调用 parseNext() 将每一行输出为一个事件,我们不想使用 "parse(File file)" .
我们将这个 Scala 案例 class 作为最终输出,但目前我们正在处理解析器的输出并使用工厂 class 来创建 Scala 案例 classes。
是否有迭代器方式从 univocity 生成 case class 对象(我确实找到了 BeanListProcessor 但它不适用于迭代器方式)?
答案可以在 Java 或 Scala 中..
谢谢, R
def parseRecord(field: Array[String], univocityContext: Option[ParsingContext]): Option[lineEvent] = {
val parsingContext = univocityContext.get
val parsedEvent = new ParsedEventConstructor()
for ((index, counter) <- parsingContext.extractedFieldIndexes().zipWithIndex){
val columnHeader = parsingContext.headers()(index)
columnHeader match {
case "header1" => {
parsedEvent.parsedheader1 += field(counter)
}
case "header2" => {
parsedEvent.parsedheader2 += field(counter)
}
case _ => parsedEvent.parsedOtherValues += field(counter)
}
}
Some(parsedEvent.getParsedEvent())
}
uniVocity-parsers 有一个 BeanProcessor
(名称中没有 "List"),它将每个解析的 bean 提交给您需要实现的 "beanProcessed" 回调方法。 BeanListProcessor
只是一个方便的 class 扩展 BeanProcessor
以将每个对象添加到列表中,它不是获取对象的唯一方法。
您还可以使用 CsvRoutines
对象及其 iterate
方法来迭代 bean,而无需使用上述回调。检查 this example.