我正在处理/etc/group
来自系统的文件。CSV input
我用分隔符 step加载它:
。它有四个字段:group
, pwfield
, gid
, members
。该members
字段是一个逗号分隔的列表,其中未指定计数的帐户名称从 0 到无限。
我想生成一个包含三个字段的记录列表:group
, gid
, account
。第一步我用User Defined Java Class
,第二步我用Select values
。
示例输入:
root:x:0:
first:x:100:joe,jane,zorro
second:x:101:steve
示例输出 (XLS) - 预期:
group gid account
first 100 joe
first 100 jane
first 100 zorro
second 101 steve
示例输出 (XLS) - 实际错误:
group gid account
first 100 zorro
first 100 zorro
first 100 zorro
second 101 steve
用户定义的 Java 类:
public boolean processRow(StepMetaInterface smi, StepDataInterface sdi) throws KettleException
{
// boilerplate
Object[] r = getRow();
if (r == null) {
setOutputDone();
return false;
}
String tmp = get(Fields.In, "members").getString(r);
if(null==tmp)
return true;
String accounts[] = tmp.split(",");
for(int i=0; i<accounts.length; ++i){
Object[] out_row = createOutputRow(r, data.outputRowMeta.size());
String account = accounts[i];
get(Fields.Out, "account").setValue(out_row,account);
putRow(data.outputRowMeta, out_row);
}
return true;
}
我相信我错过了调用某些管理功能,或者我应该使用createOutRow()
. 谷歌没有帮助。
神奇的是,如果我创建一个如图所示的转换,那么
XLS debug A
account
每行都有正确的值XLS debug B
具有重复account
值,如示例输出。
如果我Dummy
在之前放置一个步骤Select values 7
,则XLS debug B
变得正确并XLS debug A
变得糟糕。