Kettle中JavaScript内置函数说明

本文链接:https://blog.csdn.net/u010192145/article/details/102220563

我们在使用JavaScript组件的时候,在左侧核心树对象栏中可以看到Kettle为我们提供了很多简洁强大的内置函数,帮助我们在写脚本的时候对数据、参数变量等能很轻松的做处理,体验编码的感觉.本篇将详细介绍JavaScript组件中的函数功能

脚本组件包含的函数主要包括六大类,分别是:

  • 字符串类型的函数(String Functions)
  • 浮点型的函数(Numeric Functions)
  • 日期类型函数(Date Functions)
  • 逻辑判断型函数(Logic Functions)
  • 特殊的函数(Special Functions)
  • 文件处理类函数(File Functions)

字符串类型函数(String Functions)

顾名思义,字符串类型的函数肯定是针对字符串类型的参数、变量进行处理操作的函数

日期转字符串(date2str)

日期转字符串函数date2str主要有4个方法,分别是:

  • date2str(date):传入日期实例,转换成字符串类型
  • date2str(date,format):传入日期和格式化参数,进行格式化转换
  • date2str(date,format,iso):传入日期和参数格式化及ISO代码进行转换,(DE = German, EN = English, FR = France, …)
  • date2str(date,format,iso,zone):传入时区进行格式化,例如北京时区(GMT+8)

日期格式化参数format参数类型供参考:

  1. yy / yyyy - 06 / 2006
  2. MM / MMM / MMMMM - 11 / Nov / November
  3. d / dd  - 1 / 01
  4. E / EEEE - Tue / Tuesday
  5. hh / HH - 11 / 23
  6. m / mm - 5 / 05
  7. s / ss - 8 / 08

代码示例:

  1. var dValue = new Date();
  2. writeToLog(date2str(dValue,"dd.MM.yyyy"));
  3. writeToLog(date2str(dValue,"dd.MM.yyyy HH:mm:ss"));
  4. writeToLog(date2str(dValue,"E.MMM.yyyy","DE"));
  5. writeToLog(date2str(dValue,"dd.MM.yyyy HH:mm:ss","EN"));
  6. writeToLog(date2str(dValue,"dd.MM.yyyy HH:mm:ss","ZH", "GMT+8"));
  7. writeToLog(date2str(dValue,"yyyy-MM-dd HH:mm:ss","ZH", "GMT+8"));

以上代码在控制台将会输出如下:

  1. 2019/08/19 10:12:56 - JavaScript代码.0 - 19.08.2019
  2. 2019/08/19 10:12:56 - JavaScript代码.0 - 19.08.2019 10:12:56
  3. 2019/08/19 10:12:56 - JavaScript代码.0 - Mo.Aug.2019
  4. 2019/08/19 10:12:56 - JavaScript代码.0 - 19.08.2019 10:12:56
  5. 2019/08/19 10:12:56 - JavaScript代码.0 - 19.08.2019 10:12:56
  6. 2019/08/19 10:12:56 - JavaScript代码.0 - 2019-08-19 10:12:56

转义HTMLescapeHtml(html)

代码如下:

  1. var html="<h1>我是H2标题</h2>";
  2. writeToLog(escapeHtml(html))

最终输出

2019/08/19 10:16:13 - JavaScript代码.0 - &lt;h1&gt;我是H2标题&lt;/h2&gt;

转义SQL(escapeSQL(var))

  1. var str1 = "SELECT * FROM CUSTOMER WHERE NAME='" + escapeSQL("McHale's Navy") + "'";
  2. writeToLog(str1)

该函数会把单引号转成双引号,输出结果如下:

2019/08/19 10:18:59 - JavaScript代码.0 - SELECT * FROM CUSTOMER WHERE NAME='McHale''s Navy'

构造定长字符串(fillString(char,length))

代码示例如下:

  1. writeToLog(fillString("x",10));
  2. writeToLog(fillString("A",3));

最终会输出10个X和3个A,输出结果如下:

  1. 2019/08/19 10:24:08 - JavaScript代码.0 - xxxxxxxxxx
  2. 2019/08/19 10:24:08 - JavaScript代码.0 - AAA

需要注意的是第一个是一个char类型的单字符,不能是字符串

统计字符串出现频次(getOcuranceString(str,searchStr))

第一个参数是要搜索的完整字符串,第二个参数是要搜索统计的字符串

代码示例:

  1. var sef='2007-09-11';
  2. writeToLog(getOcuranceString(sef,'0'))
  3. writeToLog(getOcuranceString(sef,'00'))

我们分别统计字符串0和00最终出现的次数,此时,日志最终打印的次数是3和1:

  1. 2019/08/19 10:28:45 - JavaScript代码.0 - 3
  2. 2019/08/19 10:28:45 - JavaScript代码.0 - 1

获取字符串下标索引(indexOf)

获取下标索引主要有2个重构函数,分别是:

  • indexOf(string,subString):获取出现字符串的索引开始位置
  • indexOf(string,subString,fromIndex);指定开始位置,获取字符串索引开始位置

代码示例:

  1. var str1= "Hello Pentaho!";
  2. var str2= indexOf(str1, "Pentaho");
  3. var str3= indexOf(str1, "o", 7);
  4. writeToLog("Input : " + str1);
  5. writeToLog("Index of 'Pentaho' : " + str2);
  6. writeToLog("index of 'o', search from position 7 : " + str3);

最终控制台输出:

  1. 2019/08/19 10:34:16 - JavaScript代码.0 - Input : Hello Pentaho!
  2. 2019/08/19 10:34:16 - JavaScript代码.0 - Index of 'Pentaho' : 6
  3. 2019/08/19 10:34:16 - JavaScript代码.0 - index of 'o', search from position 7 : 12

首字母大写(initCap)

对指定字符串首字母大写处理,来看代码示例:

  1. var str1 = "my home";
  2. writeToLog(initCap(str1));
  3. writeToLog(initCap('test a aaa cw'));
  4. writeToLog(initCap('myhome'));

此时,最终控制台输出如下:

  1. 2019/08/19 10:41:27 - JavaScript代码.0 - My Home
  2. 2019/08/19 10:41:27 - JavaScript代码.0 - Test A Aaa Cw
  3. 2019/08/19 10:41:27 - JavaScript代码.0 - Myhome

字符串转小写(lower)

将传入字符串全部转小写

代码如下:

  1. var str1= "Hello World!";
  2. var str2= lower(str1);
  3. writeToLog("Input:" + str1);
  4. writeToLog("Converted to LowerCase:" + str2);
  5. writeToLog(lower('DDDHelloSWxss'))

响应内容

  1. 2019/08/19 10:43:09 - JavaScript代码.0 - Input:Hello World!
  2. 2019/08/19 10:43:09 - JavaScript代码.0 - Converted to LowerCase:hello world!
  3. 2019/08/19 10:43:09 - JavaScript代码.0 - dddhelloswxss

字符串填充左侧(lpad(string,char,length))

用指定长度的给定字符将字符串填充到左侧

参数定义:

  • 1:传入字符串
  • 2:填充单字符
  • 3:填充单字符长度

如果length长度超过给定字符串的长度,将对填充字符串做减法,例如:

  1. var str1= "Hello World!";
  2. writeToLog("Lpad:" + lpad(str1, "x",20));

此时,最终输出结果为:

2019/08/19 10:46:38 - JavaScript代码.0 - Lpad:xxxxxxxxHello World!

最终的完成长度是20个字符长度,因此填充的单字符x并没有填充20次

如果length长度小于给定字符串的长度,则默认返回原字符串,不做填充,代码示例:

  1. var str1= "Hello World!";
  2. writeToLog("Lpad:" + lpad(str1, "x",5));

此时最终的输出结果为:

2019/08/19 10:46:38 - JavaScript代码.0 - Lpad:Hello World!

去空字符(ltrim)

从左侧开始去除空字符串

数字转字符串(num2str)

给定数字,转换为字符串,主要有3个构造函数:

  • num2str(num):转换num数字为字符串
  • num2str(num,format):格式化数字为指定字符串
  • num2str(num,format,iso):按照本地ISO编码进行格式化

代码示例如下:

  1. var d1 = 123.40;
  2. var d2 = -123.40;
  3. writeToLog(num2str(d1));
  4. writeToLog(num2str(d1, "0.00"));
  5. writeToLog(num2str(d1, "0.00", "EN"));
  6. writeToLog(num2str(d2, "0.00;(0.00)", "EN"));

最终控制台输出:

  1. 2019/08/19 11:00:17 - JavaScript代码.0 - 123.4
  2. 2019/08/19 11:00:17 - JavaScript代码.0 - 123.40
  3. 2019/08/19 11:00:17 - JavaScript代码.0 - 123.40
  4. 2019/08/19 11:00:17 - JavaScript代码.0 - (123.40)

XML保护标签函数转换(protectXMLCDATA)

传入给定字符串,添加标准保护,代码示例

  1. var str1 = "my home";
  2. writeToLog(protectXMLCDATA(str1));

此时,将会给变量str1加上保护标签

  1. 2019/08/19 11:02:09 - JavaScript代码.0 - <![CDATA[my home]]>

移除字符串中CRLF字符(removeCRLF(str))

给定字符串中删除CR END LF的字符串

替换字符串(replace)

替换字符串主要包括两个构造函数:

  • replace(str,searchStr,replaceStr):从指定字符串中查询,然后替换
  • replace(str,firstSearch,firstReplace,secondSearch,SecondReplace...):无限查询替换

代码示例如下:

  1. var str1 = "Hello World, this is a nice function";
  2. var str2 = replace(str1,"World", "Folk");
  3. writeToLog(str2);
  4. var str2 = replace(str1,"World", "Folk", "nice","beautifull");
  5. writeToLog(str2);

最终输出:

  1. 2019/08/19 11:10:21 - JavaScript代码.0 - Hello Folk, this is a nice function
  2. 2019/08/19 11:10:21 - JavaScript代码.0 - Hello Folk, this is a beautifull function

字符串右侧填充(rpad(string,char,length))

使用方法同lpad,只是一个是左侧,一个是右侧

去除空字符(右侧)(rtrim)

正则切分(str2RegExp)

出入一个正则表达式,对string字符串进行Split操作.代码如下:

  1. var strToMatch = "info@proconis.de";
  2. var strReg = "^(\\w+)@([a-zA-Z_]+?)\\.([a-zA-Z]{2,3})$";
  3. var xArr =  str2RegExp(strToMatch, strReg);
  4. if ( xArr != null ) {
  5. for(i=0;i<xArr.length;i++) {
  6. writeToLog(xArr[i]);
  7. }
  8. }
  9. else {
  10. writeToLog("no match");
  11. }

最终控制台输出:

  1. 2019/08/19 13:21:19 - JavaScript代码.0 - info
  2. 2019/08/19 13:21:19 - JavaScript代码.0 - proconis
  3. 2019/08/19 13:21:19 - JavaScript代码.0 - de

字符串截取(substr)

通过制定索引开始对字符串进行截取操作,主要有两个重构参数:

  • substr(string,from):指定from索引开始截取字符串
  • substr(string,from,to):指定开始和截止索引进行截取

代码示例:

  1. var str1= "Hello Pentaho!";
  2. var str2= substr(str1, 6);
  3. var str3= substr(str1, 6, 7);
  4. writeToLog("Input : " + str1);
  5. writeToLog("From position 6: " + str2);
  6. writeToLog("From position 6 for 7 long : " + str3);

控制台输出如下:

  1. 2019/08/19 13:31:20 - JavaScript代码.0 - Input : Hello Pentaho!
  2. 2019/08/19 13:31:20 - JavaScript代码.0 - From position 6: Pentaho!
  3. 2019/08/19 13:31:20 - JavaScript代码.0 - From position 6 for 7 long : Pentaho

去除左右空格(trim)

不转义HTML(unEscapeHtml(html))

针对以转义的HTML字符进行解密,代码如下:

  1. var w='<h2>我是H2标题</h2>';
  2. var esW=escapeHtml(w);
  3. var unesw=unEscapeHtml(esW);
  4. writeToLog(esW);
  5. writeToLog(unesw);

最终控制台输出:

  1. 2019/08/19 13:38:16 - JavaScript代码.0 - &lt;h2&gt;我是H2标题&lt;/h2&gt;
  2. 2019/08/19 13:38:16 - JavaScript代码.0 - <h2>我是H2标题</h2>

解码转义XML(unEscapeXml )

字符串转大写(upper)

将传入字符串全部转大写.例如:

  1. var str="Hello World";
  2. writeToLog(upper(str));

浮点型的函数(Numeric Functions)

计算绝对值(abs(num))

计算一个数值的绝对值,代码示例:

  1. var d1 = -1234.01;
  2. var d2 = 1234.01;
  3. writeToLog(abs(d1));
  4. writeToLog(abs(d2));

最终控制台输出为:

  1. 2019/08/19 13:51:00 - JavaScript代码.0 - 1234.01
  2. 2019/08/19 13:51:00 - JavaScript代码.0 - 1234.01

最小双精度值(ceil(num))

返回最小的双精度值。该值将被四舍五入。代码示例:

  1. var d1 = -1234.01;
  2. var d2 = 1234.01;
  3. writeToLog(ceil(d1));
  4. writeToLog(ceil(d2));

最终控制台输出:

  1. 2019/08/19 13:52:40 - JavaScript代码.0 - -1234
  2. 2019/08/19 13:52:40 - JavaScript代码.0 - 1235

最大数值(floor(num))

返回最大数值,该值将被四舍五入,代码示例:

  1. var d1 = -1234.01;
  2. var d2 = 1234.01;
  3. writeToLog(floor(d1));
  4. writeToLog(floor(d2));

运行结果如下:

  1. 2019/08/19 13:55:13 - JavaScript代码.0 - -1235
  2. 2019/08/19 13:55:13 - JavaScript代码.0 - 1234

字符串转数值(str2num(var))

字符串转数值主要包含两个构造函数,分别是

  • str2num(str):传入数值字符串,进行格式化转换
  • str2num(str,format):通过指定格式进行数值转换

代码示例如下:

  1. var str1 = "1.234,56";
  2. var str2 = "12";
  3. writeToLog((str2num(str1,"#,##0.00")));
  4. writeToLog((str2num(str2)));

最终控制台输出:

  1. 2019/08/19 14:02:19 - JavaScript代码.0 - 1.234
  2. 2019/08/19 14:02:19 - JavaScript代码.0 - 12

截取数值(trunc)

trunc(1234.9); // 返回 1234

日期类型函数(Date Functions)

日期相加(dateAdd)

针对日期变量进行相应的添加时间,添加频率包括年、月、日、时、分、秒 等等

函数定义:dateAdd(date,format,plusNum)

  • date:日期对象
  • format:要加的类型
  • plusNum:加的数值

相加类型主要包括:

  • y:年
  • m:月
  • d:日
  • w:周
  • wd:工作日
  • hh:小时
  • mi:分钟
  • ss:秒

代码示例如下:

  1. var d1 = new Date();
  2. var fmt='yyyy-MM-dd HH:mm:ss';
  3. writeToLog("当前时间:"+date2str(d1,fmt));
  4. var py=dateAdd(d1,'y',1);
  5. var fy=date2str(py,fmt);
  6. writeToLog("加1年:"+fy);

最终控制台输出:

  1. 2019/08/19 14:17:41 - JavaScript代码.0 - 当前时间:2019-08-19 14:17:41
  2. 2019/08/19 14:17:41 - JavaScript代码.0 - 加1年:2020-08-19 14:17:41

日期比较(dateDiff)

两个日期相互比较

函数定义:dateDiff(startDate,endDate,type)

  • startDate:开始日期
  • endDate:截止日期
  • type:返回相差数值类型

类型主要包括:

  • y:年
  • m:月
  • d:日
  • w:周
  • wd:工作日
  • hh:小时
  • mi:分钟
  • ss:秒

获取指定日期数值(getDayNumber)

根据类型获取指定日期的数值

函数定义:getDayNumber(date,type)

  • date:当前日期实例
  • type:类别

类别主要分四类

  • y:获取当年的天数
  • m:获取当月的天数
  • w:获取本周的天数
  • wm:获取当月中本周的天数

代码示例:

  1. var d1 = new Date();
  2. writeToLog(getDayNumber(d1, "y"));
  3. writeToLog(getDayNumber(d1, "m"));
  4. writeToLog(getDayNumber(d1, "w"));
  5. writeToLog(getDayNumber(d1, "wm"));

getFiscalDate

  1. // Returns the fiscal Date from the date value,
  2. // based on a given offset.
  3. //
  4. // Usage:
  5. // getFiscalDate(var);
  6. // 1: Date - The Variable with the Date.
  7. // 2: String - The Date/Month which represents
  8. // the fiscal Start Offset. Format allways "dd.MM.".
  9. //
  10. // 2006-11-15
  11. //
  12. var d1 = new Date();
  13. var str1 = "01.07.";
  14. var str2 = "10.12.";
  15. Alert(getFiscalDate(d1, str1));
  16. Alert(getFiscalDate(d1, str2));

获取下一个工作日日期(getNextWorkingDay)

传入当前日期,获取该日期后面一个工作日日期

函数定义getNextWorkingDay(date)

代码示例如下:

  1. var d1 = new Date();
  2. // 周1
  3. var d2=str2date('2019-08-19 16:36:00',fmt);
  4. //周 6
  5. var d3=str2date('2019-08-17 16:36:00',fmt);
  6. writeToLog(date2str(getNextWorkingDay(d1),fmt));
  7. writeToLog(date2str(getNextWorkingDay(d2),fmt));
  8. writeToLog(date2str(getNextWorkingDay(d3),fmt));

我们这d2和d3变量中定义了不同的日期实例,分别是周1和周6,最终通过getNextWorkingDay能获取得到下一个工作日日期,控制台输出如下:

  1. 2019/08/19 16:37:38 - JavaScript代码.0 - 2019-08-20 16:37:38
  2. 2019/08/19 16:37:38 - JavaScript代码.0 - 2019-08-20 16:36:00
  3. 2019/08/19 16:37:38 - JavaScript代码.0 - 2019-08-19 16:36:00

获取当前月份数值(month(date))

获取当前日期的月份数值,需要注意的是,该值的月份是从0开始的,因此我们最终得到的结果应该+1才是我们的真实月份数值,代码示例:

  1. var d1 = new Date();//2019/08/19
  2. writeToLog(month(d1)); //最终输出为7

获取当前时间的季度值(quarter(date))

根据指定日期获取当前季度数值

  1. var d1 = new Date();//2019/08/19
  2. writeToLog(quarter(d1));//最终输出为3(代表第三季度)

字符串转日期(str2date)

字符串转日期和日期转字符串有点类似,只不过主体对换了一下,但是传入的格式参数都是一样的,主要有4个重载函数:

  • str2date(str):默认转换
  • str2date(str,format):传入format格式化参数
  • str2date(str,format,iso):根据iso编码及格式化参数进行转换
  • str2date(str,format,iso,timezone):根据不同时区的iso编码进行格式化转换

代码示例如下:

  1. writeToLog(str2date("01.12.2006","dd.MM.yyyy"));
  2. writeToLog(str2date("01.12.2006 23:23:01","dd.MM.yyyy HH:mm:ss"));
  3. writeToLog(str2date("Tue.May.2006","E.MMM.yyyy","EN"));
  4. writeToLog(str2date("22.02.2008 23:23:01","dd.MM.yyyy HH:mm:ss","DE"));
  5. writeToLog(str2date("22.02.2008 23:23:01","dd.MM.yyyy HH:mm:ss","DE", "EST"));

截取日期(truncDate(date,type))

指定截取不同的日期部分,函数定义truncDate(date,type)

  • date:当前日期实例
  • type:截取类型

类型主要有6中,分别是整型,从0-5:

  • 5:截取月份
  • 4:截取天数
  • 3:截取小时
  • 2:截取分钟
  • 1:截取秒
  • 0:截取毫秒

代码示例 如下:

  1. var dateTime = new Date();
  2. var date0 = truncDate(dateTime, 0); // gives back today at yyyy/MM/dd HH:mm:ss.000
  3. var date1 = truncDate(dateTime, 1); // gives back today at yyyy/MM/dd HH:mm:00.000
  4. var date2 = truncDate(dateTime, 2); // gives back today at yyyy/MM/dd HH:00:00.000
  5. var date3 = truncDate(dateTime, 3); // gives back today at yyyy/MM/dd 00:00:00.000
  6. var date4 = truncDate(dateTime, 4); // gives back today at yyyy/MM/01 00:00:00.000
  7. var date5 = truncDate(dateTime, 5); // gives back today at yyyy/01/01 00:00:00.000

获取当年的周数(week)

获取指定日期的周数,代码示例:

  1. var d1 = new Date(); //2019/08/19
  2. writeToLog(week(d1));// 返回34

获取年份(year)

获取传入日期的年份,代码示例:

  1. var d1 = new Date(); //2019/08/19
  2. writeToLog(year(d1));// 返回2019

逻辑判断型函数(Logic Functions)

isCodepage

判断字符串的codepage项,代码示例:

  1. var xStr = "Réal";
  2. writeToLog(isCodepage(xStr, "UTF-8"));// true
  3. writeToLog(isCodepage(xStr, "windows-1250"));// true

是否日期(isDate(str))

判断当前字符串是否日期

  1. var d1 = "Hello World";
  2. var d2 = new Date();
  3. writeToLog(isDate(d1));//false
  4. writeToLog(isDate(d2));//true

是否为空(isEmpty(str))

判断字符串是否为空

  1. var d = "Hello World";
  2. Alert(isEmpty(d));//false

判断字符串是否为邮箱标准格式(isMailValid(str))

判断一个字符串是否是邮箱

判断是否是数值(isNum(str))

判断一个字符串是否是数值

  1. var str1 = "Hello World";
  2. var str2 = 123456;
  3. Alert(isNum(str1));//false
  4. Alert(isNum(str2));//true

是否正则匹配(isRegExp)

判断给定的正则表达式是否匹配当前的字符串,主要有2个函数定义:

  • isRegExp(str,reg):给定正则判断字符串是否匹配
  • isRegExp(str,reg1,reg2,reg3…);可以递归判断正则匹配

最终返回的是匹配的次数数值,如果不匹配,返回-1

代码示例如下:

  1. var email1 ="info@proconis.de";
  2. var email2= "support@proconis.co.uk";
  3. var email3= "HelloWorld@x";
  4. var reg1="^\\w+@[a-zA-Z_]+?\\.[a-zA-Z]{2,3}$";
  5. var reg2="^[\\w-\.]+@([\\w-]+\\.)+[\\w-]{2,4}$";
  6. writeToLog(isRegExp(email1, reg1,reg2) + " Matches"); //1
  7. writeToLog(isRegExp(email2, reg1,reg2) + " Matches");  //2
  8. writeToLog(isRegExp(email3, reg1,reg2) + " Matches");// 1

是否工作日(isWorkingDay(date))

判断某日期是否是工作日,代码示例:

  1. var d1 = new Date();//周1
  2. var d2=str2date('2019-08-17','yyyy-MM-dd') //周六
  3. writeToLog(isWorkingDay(d1));//true
  4. writeToLog(isWorkingDay(d2));//false

特殊的函数(Special Functions)

弹框信息(Alert(msg))

在屏幕前弹出一个信息框

加载JavaScript文件(LoadScriptFile)

将一个javascript文件加载到实际的运行上下文中。应该从定义的StartScript调用此函数,否则,每次处理都会加载javascript文件行。

代码示例如下:

  1. var xPfad = "F:/bak/Hello.js";
  2. LoadScriptFile(xPfad);

此时,我们的外部JS文件仅仅是包含一句简单的输出,如下:

writeToLog("Hello LoadScriptFile,outSide JS File ");

最终运行时,控制台会打印出我们在外部JS中的输出行

从当前Tab栏加载JS并运行(LoadScriptFromTab)

如果我们在当前的JavaScript组件中通过模块化的方式编写了很多脚本代码,我们可以通过LoadScriptFromTab函数进行相互调用,这对于开发抽象来说是很好的,代码示例如下:

  1. writeToLog("外部Tab加载JS-------------------------")
  2. LoadScriptFromTab('Item_1');

有效卡号判断(LuhnCheck)

如果给定的是一个有效的卡号,则返回true

  1. var str1 = "4444333322221111";
  2. writeToLog(str1 + ": " + LuhnCheck(str1)); //true
  3. var str2 = "4444333322221110";
  4. writeToLog(str2 + ": " + LuhnCheck(str2));//false

向文件中追加数据(appendToFile)

向指定文件中追加数据,如果文件不存在则创建文件

  1. var file = "F:/bak/log.txt";
  2. for(var i=0;i<100;i++){
  3. appendToFile(file,'TEST'+i+"\r\n");
  4. }

此时,该代码会向log.txt文件输出100条数据行

decode函数

decode函数有点类似于IF-THEN-ELSE语句,即表示通过给定查询的字符串是否存在,如果存在,即替换,否则返回默认值

代码示例:

  1. var str1 = "Hallo";
  2. writeToLog(decode(str1, "Hallo", "Hello"));
  3. writeToLog(decode(str1, "1", "Mr", "2", "Mrs", "N/A"));
  4. writeToLog(decode(str1, "1", "Mr", "2", "Mrs"));
  5. str1 = "Mrs";
  6. writeToLog(decode(str1, "1", "Mr", "2", "Mrs"));

控制台输出:

  1. 2019/08/19 17:39:01 - JavaScript代码.0 - Hello
  2. 2019/08/19 17:39:01 - JavaScript代码.0 - N/A
  3. 2019/08/19 17:39:01 - JavaScript代码.0 - Hallo
  4. 2019/08/19 17:39:01 - JavaScript代码.0 - Mrs

执行命令(execProcess)

代码如下:

  1. var t=execProcess('ping www.baidu.com');
  2. writeToLog(t)

调用命令行,ping百度的网址,最终输出返回数据

执行SQL语句(fireToDB)

通过获取数据库连接名称,传递SQL语句,以返回SQL查询的值,函数定义:

  • fireToDB(connectionName,SQL);第一个参数为数据库连接名称,我们在JNDI中定义的名称,第二个参数为SQL语句
  1. var strConn = "MY Connection";
  2. var strSQL = "SELECT COUNT(*) FROM ...";
  3. var xArr = fireToDB(strConn, strSQL);

仅仅获取数值(getDigitsOnly)

在给定的字符串中仅仅筛选过滤得到数值,代码如下:

  1. var str1 = "abc123cde";
  2. writeToLog(getDigitsOnly(str1));//返回123

获取Kettle环境变量的值(getEnvironmentVar)

获取在Kettle中的环境变量的值

  1. writeToLog(getEnvironmentVar("user.dir"));
  2. writeToLog(getEnvironmentVar("user.name"));

获取当前进程的受影响行数(getProcessCount(type))

根据类型获取当前进程的受影响行数,类型如下:

  • u:更新行数
  • i:插入行数
  • w:写入行数
  • r:读取行数
  • o:输出行数
  1. writeToLog(getProcessCount("u"));
  2. writeToLog(getProcessCount("r"));

获取当前转换名称(getTransformationName)

获取当前的转换名称

  1. var xTranName = getTransformationName();
  2. writeToLog(xTranName);

获取Kettle环境中的变量值(getVariable)

从当前的Kettle环境中获取指定的变量值,目前函数有2个重载:

  • getVariable(varName);根据变量名称获取变量值
  • getVariable(varName,defaultValue):根据变量名获取值,如果不存在则使用默认值
  1. var strVarName="getVariableTest";
  2. var strVarValue="123456";
  3. Alert(getVariable(strVarName, ""));
  4. setVariable(strVarName,strVarValue, "r");
  5. Alert(getVariable(strVarName, ""));
  6. strVarValue="654321";
  7. setVariable(strVarName,strVarValue, "r");
  8. Alert(getVariable(strVarName, ""));

控制台打印(println)

  1. var str = "Hello World!";
  2. print(str);

移除数值(removeDigits)

移除给定字符串中的数值,代码示例:

  1. var str1 = "abc123cde";
  2. writeToLog(removeDigits(str1));//返回abccde

发送邮件

设置环境变量(setEnvironmentVar)

通过在Script脚本组件中调用函数重新设置Kettle的环境变量

  1. var strVarName="setEnvTest";
  2. var strVarValue="123456";
  3. Alert(getEnvironmentVar(strVarName));
  4. setEnvironmentVar(strVarName,strVarValue);
  5. Alert(getEnvironmentVar(strVarName));
  6. strVarValue="654321";
  7. setEnvironmentVar(strVarName,strVarValue);
  8. Alert(getEnvironmentVar(strVarName));

设置变量(setVariable)

通过setVariable函数设置环境变量,该用途可以用于重新赋值Kettle环境中已经存在的变量值或者重新生成变量值

函数定义setVariable(key,value,level)

  • key:变量名称
  • value:变量值
  • level:级别,主要包括s(system)、r(root)、p(parent)、g(grandparent)四种类别

代码示例如下:

  1. var strVarName="setEnvTest";
  2. var strVarValue="123456";
  3. Alert(getVariable(strVarName, ""));
  4. setVariable(strVarName,strVarValue, "r");
  5. Alert(getVariable(strVarName, ""));
  6. strVarValue="654321";
  7. setVariable(strVarName,strVarValue, "r");
  8. Alert(getVariable(strVarName, ""));

写入日志(writeToLog)

打印并写入日志信息,该函数可能是我们用到的最多的函数,可以帮助我们调试信息,主要有两个重载:

  • writeToLog(msg):写入msg日志信息
  • writeToLog(level,msg):根据level基本写入msg信息

关于日志的级别,这里主要是简写的方式,主要如下:

  • d(Debug):调试模式
  • l(Detailed):详细
  • e(Error):错误
  • m(Minimal):最小日志
  • r(RowLevel):行级日志
  1. writeToLog("Hello World!");
  2. writeToLog("r", "Hello World!");

文件处理类函数(File Functions)

复制文件(copyFile)

复制一个文件到目标目录,函数定义如下:

copyFile(sourceFile,targetFile,overwrite)

  • sourceFile:源文件
  • targetFile:目标文件
  • overWrite:是否覆盖,如果目标文件存在的话,布尔类型
  1. var file1 = "F:/bak/log.txt";
  2. var targetFile="F:/bak/logTarget.txt";
  3. copyFile(file1,targetFile,false)

创建文件夹(createFolder)

创建一个文件夹,代码示例如下:

  1. var strFolder = "F:/bak/createFolder";
  2. createFolder(strFolder);

删除文件(deleteFile)

删除一个文件(不能删除文件夹)

  1. var targetFile="F:/bak/logTarget.txt";
  2. deleteFile(targetFile);

判断文件是否存在(fileExists())

判断文件是否存在

  1. var targetFile="F:/bak/logTarget.txt";
  2. fileExists(targetFile);

获取文件扩展名(getFileExtension)

如果文件不存在,则返回null,代码示例

  1. var file1 = "F:/bak/log.txt";
  2. var ext=getFileExtension(file1);
  3. writeToLog("扩展名:"+ext)

获取文件大小(getFileSize)

获取文件大小,结果是一个long类型的长整型数值

  1. var file1 = "F:/bak/log.txt";
  2. var ext=getFileSize(file1);
  3. writeToLog("大小:"+ext)

获取文件最后修改日期(getLastModifiedTime)

获取文件最后修改日期,函数定义:

getLastModifiedTime(filePath,format)

  • filePath:文件路径
  • format:日期格式化
  1. var file1 = "F:/bak/log.txt";
  2. var ext=getLastModifiedTime(file1,"yyyy-MM-dd HH:mm:ss");

获取文件的父文件夹名称(getParentFoldername)

获取文件的父文件夹名称

  1. var file1 = "F:/bak/log.txt";
  2. var parentFolder=getParentFoldername(file1);

获取文件简称(getShortName)

获取文件简称

  1. var file1 = "F:/bak/log.txt";
  2. var shortName=getShortFilename(file1);
  3. writeToLog("简单名称:"+shortName)//返回log.txt

判断是否是一个文件(isFile)

判断是否是一个文件

  1. var file1 = "F:/bak/log.txt";
  2. var flag=isFile(file1) //true

判断是否是一个文件夹(isFolder)

判断是否是一个文件夹

  1. var file1 = "F:/bak/log.txt";
  2. var flag=isFolder(file1) //false

加载一个文件的内容(loadFileContent)

从指定文件中加载内容,主要有两个重载函数:

  • loadFileContent(filePath):默认加载文件
  • loadFileContent(filePath,encoding):指定编码加载文件内容

代码示例:

  1. var file1 = "F:/bak/log.txt";
  2. var content=loadFileContent(file1);
  3. var c1=loadFileContent(file1,"UTF-8")
  4. writeToLog(content)

移动文件(moveFile)

移动指定文件,函数定义moveFile(source,target,overWrite)

  • source:源文件
  • target:目标文件
  • overWrite;是否覆盖,如果目标文件存在,布尔类型值
  1. var file1 = "F:/bak/log.txt";
  2. var targetFile="F:/bak/logTarget.txt";
  3. moveFile(file1,targetFile,false)

创建一个空文件(touch)

创建一个空文件

  1. var strFile = "F:/bak/log.txt";
  2. touch(strFile);

总结

以上就是Kettle 8.3版本中的内置函数方法,方法很多,写这篇博客也是很累,算是全部都学习了一遍,脑子里已经记忆了一遍,但是我们也不需要死记硬背,就和我们学些Linux命令一样,如果你知道man命令,对某个命令不是很了解的话直接通过man命令学习即可.

Kettle也是如此,对于某个函数不是很了解的话,右键点击该函数,会出现sample字样菜单,点击该菜单即可弹出该函数的介绍和使用信息,里面包含了该函数的调用示例和函数详细介绍,也是很人性化的.

上一篇:python中的内置函数(一), lambda, filter, map


下一篇:DES算法详解