【问题标题】:Univocity parser - Iterator way generating scala case classesUnivocity 解析器 - 生成 scala 案例类的迭代器方式
【发布时间】:2016-09-11 22:12:05
【问题描述】:

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

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

有没有一种迭代器方式可以从单义性生成案例类对象(我确实找到了 BeanListProcessor,但它不适用于迭代器方式)?

答案可以是 Java 或 Scala..

谢谢, 回复

  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())
  }

【问题讨论】:

    标签: java scala univocity


    【解决方案1】:

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

    您还可以使用CsvRoutines 对象及其iterate 方法在不使用上述回调的情况下迭代bean。检查this example

    【讨论】:

    • 非常感谢 Jeronimo .. 这有帮助,我从您的其他线程中发现您开发了 Univocity?伟大的工作,我对表演印象深刻。如果可能的话,我想以任何方式做出贡献?干杯,R
    • 很高兴能提供帮助并听到您有兴趣做出贡献。随时提交带有改进的拉取请求或报告您发现的任何错误。干杯!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-03
    • 1970-01-01
    • 2018-05-16
    • 1970-01-01
    • 2019-09-24
    • 1970-01-01
    相关资源
    最近更新 更多