我需要执行以下操作。提供的输入如下图
State city
NY joe
NY jane
LA zorro
LA steve
并且输出应该是
State city
NY joe, jane
LA steve, zorro
如何使这成为可能?我想我必须处理多个输入行,但是当我第二次尝试使用该getRow()
方法读取新行时,它会抛出数组越界异常......请帮助我解决这个问题.. TIA
这是我尝试过的逻辑...
String cities;
Object[][] r = new Object[10][];
static int j;
public boolean processRow(StepMetaInterface smi, StepDataInterface sdi) throws KettleException
{
for(;j<10||(r[j]=getRow())!=null;j++)
{
return true;
}
cities=get(Fields.In, "CITY").getString(r[0]);
int i;
for(i=1;r[i]!=null;i++)
{
if(get(Fields.In, "STATE").getString(r[i-1])==get(Fields.In, "STATE").getString(r[i])){
cities=cities+","+get(Fields.In, "CITY").getString(r[i]);
}
else{
Object[] outputRow = createOutputRow(new Object[4],1);
get(Fields.Out, "STATE").setValue(outputRow, get(Fields.In, "STATE").getString(r[i-1]));
get(Fields.Out, "CITIES").setValue(outputRow, cities);
putRow(data.outputRowMeta, outputRow);
cities=get(Fields.In, "CITY").getString(r[i]);
}
}
Object[] outputRow = createOutputRow(new Object[4],1);
get(Fields.Out, "STATE").setValue(outputRow, get(Fields.In, "STATE").getString(r[i-1]));
get(Fields.Out, "CITIES").setValue(outputRow, cities);
putRow(data.outputRowMeta, outputRow);
return false;
}