2014年9月19日金曜日

Apache Commons CSVとgroovyで、CSVデータの各列の最小長・最大長・平均長を求める

Apache Commons CSVとgroovyで、CSVデータの各列の最小長・最大長・平均長を求めるには、以下のコードを実行します。
import org.apache.commons.csv.*
import java.text.*

def records = 0
def ct = [:].withDefault { [min:Integer.MAX_VALUE, max:0, sum:0] }
def fmt = CSVFormat.EXCEL
  .withHeader()
def parser = fmt.parse(new FileReader("export.csv"))
for(record in parser){
  parser.getHeaderMap().each { key, index ->
    def len = record.get(index).size()
    ct[key].min = ct[key].min < len ? ct[key].min:len
    ct[key].max = ct[key].max > len ? ct[key].max:len
    ct[key].sum += record.get(index).size()
  }
  records++
}

def df = new DecimalFormat("#.#")
ct.each { key, value ->
  println "${key} : min${value.min} - max${value.max}, \
avg:${df.format(value.sum/records)}"
}
println "total records:${records}"

0 件のコメント:

コメントを投稿