2016-09-11 28 views
1

使用Univocity框架來執行自定義分析要求。我們有一個迭代器通過調用parseNext()將每行輸出爲一個事件,我們不想使用「parse(File file)」。Univocity分析器 - 迭代器生成scala案例類的方式

我們將這個Scala案例類作爲最終輸出,但目前我們正在處理解析器的輸出並使用工廠類來創建scala案例類。

有沒有從univocity生成case類對象的迭代器方法(我找到了BeanListProcessor但不能用於迭代器方式)?

答案可以在Java或斯卡拉..

感謝, [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()) 
    } 

回答

1

uniVocity-parsersBeanProcessor(沒有在名稱 「列表」),將每個解析豆提交給「 beanProcessed「你需要實現的回調方法。 BeanListProcessor只是一個便利的類,它擴展了BeanProcessor以將每個對象添加到列表中,但這不是獲取對象的唯一方法。

您還可以使用CsvRoutines對象及其iterate方法在不使用上述回調的情況下迭代bean。檢查this example

+0

非常感謝你Jeronimo ..有幫助,我從你的其他線程發現你開發了Univocity?偉大的工作,我的表現給我留下了深刻的印象。如果可能,我願意以任何方式貢獻自己的力量。歡呼聲,R –

+0

很高興能夠幫助並聽到您有興趣參與。隨意提交改進的拉取請求或報告找到的任何錯誤。乾杯! –