kettle脚本中java代码-字符串转换用法

有时候kettle中的组件不能满足需求情况下,可以使用java代码组件实现,以下是实现读取一个文本文件,但是文本文件中的分割符是个数不等的空字符,比如空格,像转为一个空格,再拆分字符串数组。这里只是一个简单用法

环境是:kettle7.0

具体组件拖拉过程不详述,这里主要介绍重点部分

上图:

文本文件输入组件中指向的文本文件内容为:

 gy  0.11   0.21 0.31
ny   0.12  0.22  0.32
qx  0.13 0.23           0.33

用户自定义java class组件内容为:

import java.util.*;

private String str1;

public boolean processRow(StepMetaInterface smi, StepDataInterface sdi) throws KettleException 
{
  Object[] r = getRow();
    	// If the row object is null, we are done processing.
		if (r == null) {
			setOutputDone();
			return false;
		}

		//String 
		str1 = get(Fields.In, "col1_col2__col3").getString(r);
		//String str2 = str1.replaceAll("[ ]+", " ");
		//String[] a1 = str2.split(" ");// 拆分为字符串数组

		String[] a1 = to_Str_arr(str1);//调用函数执行字符拆分,当然也可以直接拆分这里是顺带演示调用函数	

		// 赋值给输出变量
		String one = a1[0];
		String two = a1[1];
		String three = a1[2];
		String four = a1[3];

		// 创建输出行,
		Object[] outputRow = createOutputRow(r, data.outputRowMeta.size());
		get(Fields.Out, "out_str1").setValue(outputRow, one);

		get(Fields.Out, "out_str2").setValue(outputRow, two);
		//putRow(data.outputRowMeta, outputRow2);

		get(Fields.Out, "out_str3").setValue(outputRow, three);
		//putRow(data.outputRowMeta, outputRow3);

		get(Fields.Out, "out_str4").setValue(outputRow, four);
		putRow(data.outputRowMeta, outputRow); // 输出行
		
		return true;
}

// 这里主要是将字符串转换为字符串数组,不过先将多个空格经过正则替换为一个
private String[] to_Str_arr(String str){
		String str1 = str;
		String str2 = str1.replaceAll("[ ]+", " ");
		String[] a1 = str2.split(" ");
		return a1;
	}

关键部分已经说明,另外可以在函数中使用putRow生成新行,也就是前一个组件中有1行数据,这里可以创建n行数据来输出给后边的组件,相当于生成行记录组件;输出变量设置:

最后执行完结果为:

out_str1;out_str2;out_str3;out_str4
gy;0.11;0.21;0.31
ny;0.12;0.22;0.32
qx;0.13;0.23;0.33

发布了522 篇原创文章 · 获赞 87 · 访问量 75万+

猜你喜欢

转载自blog.csdn.net/jc_benben/article/details/90110651