使用Groovy累积字段值

时间:2014-10-21 02:41:21

标签: groovy

我有以下列KPI_PERIODKPI_VALUE,并希望使用Groovy实现名为KPI_Output的新列。

实现KPI_Output的逻辑是将KPI_Value的值相加。换句话说,对于AprKPI_OutputKPI_Value相同,因为它是第一个月。对于May,KPI_Output值为KPI_ValueApr的{​​{1}}。对于MayJunKPI_OutputKPI_ValueApr的{​​{1}}。对于MayJuneJulKPI_OutputKPI_ValueAprMay - 依此类推。 ..

Jun

如何使用Groovy实现这一目标?

Desired Results

1 个答案:

答案 0 :(得分:1)

你走了:

def input = """KPI_PERIOD  KPI_VALUE
Apr 33091    
May 29685   
Jun 31042   
Jul 32807   
Aug 32782   
Sep 34952   
Oct 32448   
Nov 31515   
Dec 24639   
Jan 25155   
Feb 31320   
Mar 33091   
"""

def splitted = input.split('\n')[1..-1]
sum = 0
def transformed = splitted.collect { it.split(/\s+/)*.trim() }.inject([]) { res, curr ->
    sum += curr[1].toInteger()
    curr << sum.toString()
    res << curr    
}
println "KPI_PERIOD    KPI_VALUE   KPI_OUTPUT"
transformed.each { 
    println "${it[0].padLeft(10)} ${it[1].padLeft(12)} ${it[2].padLeft(12)}"
}

希望一切都清楚,如果不是随意问的话。