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

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

朝闻道-夕死可矣

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值