1

使用 Univocity 框架进行自定义解析需求。我们有一个迭代器,通过调用 parseNext() 将每一行作为事件输出,我们不想使用 "parse(File file)" 。

我们将这个 Scala 案例类作为最终输出,但目前我们正在处理解析器的输出并使用工厂类来创建 Scala 案例类。

是否有一种迭代器方法可以从单义性生成案例类对象(我确实找到了 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())
  }
4

1 回答 1

1

uniVocity-parsers有一个BeanProcessor(名称中没有“List”)会将每个解析的 bean 提交给您需要实现的“beanProcessed”回调方法。这BeanListProcessor只是一个方便的类,它扩展BeanProcessor为将每个对象添加到列表中,它不是获取对象的唯一方法。

您还可以使用CsvRoutines对象及其iterate方法来迭代 bean,而无需使用上面提到的回调。检查这个例子

于 2016-09-12T08:46:15.543 回答