我們在使用JavaScript組件的時(shí)候,在左側(cè)核心樹對象欄中可以看到Kettle為我們提供了很多簡潔強(qiáng)大的內(nèi)置函數(shù),幫助我們在寫腳本的時(shí)候?qū)?shù)據(jù),、參數(shù)變量等能很輕松的做處理,體驗(yàn)編碼的感覺.本篇將詳細(xì)介紹JavaScript組件中的函數(shù)功能
腳本組件包含的函數(shù)主要包括六大類,分別是:
- 字符串類型的函數(shù)(String Functions)
- 浮點(diǎn)型的函數(shù)(Numeric Functions)
- 日期類型函數(shù)(Date Functions)
- 邏輯判斷型函數(shù)(Logic Functions)
- 特殊的函數(shù)(Special Functions)
- 文件處理類函數(shù)(File Functions)
字符串類型函數(shù)(String Functions)
顧名思義,字符串類型的函數(shù)肯定是針對字符串類型的參數(shù),、變量進(jìn)行處理操作的函數(shù)
日期轉(zhuǎn)字符串(date2str )
日期轉(zhuǎn)字符串函數(shù)date2str 主要有4個(gè)方法,分別是:
date2str(date) :傳入日期實(shí)例,轉(zhuǎn)換成字符串類型date2str(date,format) :傳入日期和格式化參數(shù),進(jìn)行格式化轉(zhuǎn)換date2str(date,format,iso) :傳入日期和參數(shù)格式化及ISO代碼進(jìn)行轉(zhuǎn)換,(DE = German, EN = English, FR = France, …)date2str(date,format,iso,zone) :傳入時(shí)區(qū)進(jìn)行格式化,例如北京時(shí)區(qū)(GMT+8)
日期格式化參數(shù)format參數(shù)類型供參考:
MM / MMM / MMMMM - 11 / Nov / November
代碼示例:
writeToLog(date2str(dValue,"dd.MM.yyyy")); writeToLog(date2str(dValue,"dd.MM.yyyy HH:mm:ss")); writeToLog(date2str(dValue,"E.MMM.yyyy","DE")); writeToLog(date2str(dValue,"dd.MM.yyyy HH:mm:ss","EN")); writeToLog(date2str(dValue,"dd.MM.yyyy HH:mm:ss","ZH", "GMT+8")); writeToLog(date2str(dValue,"yyyy-MM-dd HH:mm:ss","ZH", "GMT+8"));
以上代碼在控制臺(tái)將會(huì)輸出如下:
2019/08/19 10:12:56 - JavaScript代碼.0 - 19.08.2019 2019/08/19 10:12:56 - JavaScript代碼.0 - 19.08.2019 10:12:56 2019/08/19 10:12:56 - JavaScript代碼.0 - Mo.Aug.2019 2019/08/19 10:12:56 - JavaScript代碼.0 - 19.08.2019 10:12:56 2019/08/19 10:12:56 - JavaScript代碼.0 - 19.08.2019 10:12:56 2019/08/19 10:12:56 - JavaScript代碼.0 - 2019-08-19 10:12:56
轉(zhuǎn)義HTMLescapeHtml(html)
代碼如下:
var html="<h1>我是H2標(biāo)題</h2>";
writeToLog(escapeHtml(html))
最終輸出
2019/08/19 10:16:13 - JavaScript代碼.0 - <h1>我是H2标题</h2>
轉(zhuǎn)義SQL(escapeSQL(var) )
var str1 = "SELECT * FROM CUSTOMER WHERE NAME='" + escapeSQL("McHale's Navy") + "'";
該函數(shù)會(huì)把單引號轉(zhuǎn)成雙引號,輸出結(jié)果如下:
2019/08/19 10:18:59 - JavaScript代碼.0 - SELECT * FROM CUSTOMER WHERE NAME='McHale''s Navy'
構(gòu)造定長字符串(fillString(char,length) )
代碼示例如下:
writeToLog(fillString("x",10)); writeToLog(fillString("A",3));
最終會(huì)輸出10個(gè)X和3個(gè)A ,輸出結(jié)果如下:
2019/08/19 10:24:08 - JavaScript代碼.0 - xxxxxxxxxx 2019/08/19 10:24:08 - JavaScript代碼.0 - AAA
需要注意的是第一個(gè)是一個(gè)char類型的單字符,不能是字符串
統(tǒng)計(jì)字符串出現(xiàn)頻次(getOcuranceString(str,searchStr) )
第一個(gè)參數(shù)是要搜索的完整字符串,第二個(gè)參數(shù)是要搜索統(tǒng)計(jì)的字符串
代碼示例:
writeToLog(getOcuranceString(sef,'0')) writeToLog(getOcuranceString(sef,'00'))
我們分別統(tǒng)計(jì)字符串0和00最終出現(xiàn)的次數(shù),此時(shí),日志最終打印的次數(shù)是3和1:
2019/08/19 10:28:45 - JavaScript代碼.0 - 3 2019/08/19 10:28:45 - JavaScript代碼.0 - 1
獲取字符串下標(biāo)索引(indexOf )
獲取下標(biāo)索引主要有2個(gè)重構(gòu)函數(shù),分別是:
indexOf(string,subString) :獲取出現(xiàn)字符串的索引開始位置indexOf(string,subString,fromIndex) ,;指定開始位置,獲取字符串索引開始位置
代碼示例:
var str1= "Hello Pentaho!"; var str2= indexOf(str1, "Pentaho"); var str3= indexOf(str1, "o", 7); writeToLog("Input : " + str1); writeToLog("Index of 'Pentaho' : " + str2); writeToLog("index of 'o', search from position 7 : " + str3);
最終控制臺(tái)輸出:
2019/08/19 10:34:16 - JavaScript代碼.0 - Input : Hello Pentaho! 2019/08/19 10:34:16 - JavaScript代碼.0 - Index of 'Pentaho' : 6 2019/08/19 10:34:16 - JavaScript代碼.0 - index of 'o', search from position 7 : 12
首字母大寫(initCap )
對指定字符串首字母大寫處理,來看代碼示例:
writeToLog(initCap(str1)); writeToLog(initCap('test a aaa cw')); writeToLog(initCap('myhome'));
此時(shí),最終控制臺(tái)輸出如下:
2019/08/19 10:41:27 - JavaScript代碼.0 - My Home 2019/08/19 10:41:27 - JavaScript代碼.0 - Test A Aaa Cw 2019/08/19 10:41:27 - JavaScript代碼.0 - Myhome
字符串轉(zhuǎn)小寫(lower )
將傳入字符串全部轉(zhuǎn)小寫
代碼如下:
var str1= "Hello World!"; writeToLog("Input:" + str1); writeToLog("Converted to LowerCase:" + str2); writeToLog(lower('DDDHelloSWxss'))
響應(yīng)內(nèi)容
2019/08/19 10:43:09 - JavaScript代碼.0 - Input:Hello World! 2019/08/19 10:43:09 - JavaScript代碼.0 - Converted to LowerCase:hello world! 2019/08/19 10:43:09 - JavaScript代碼.0 - dddhelloswxss
字符串填充左側(cè)(lpad(string,char,length) )
用指定長度的給定字符將字符串填充到左側(cè)
參數(shù)定義:
如果length長度超過給定字符串的長度,將對填充字符串做減法,,例如:
var str1= "Hello World!"; writeToLog("Lpad:" + lpad(str1, "x",20));
此時(shí),最終輸出結(jié)果為:
2019/08/19 10:46:38 - JavaScript代碼.0 - Lpad:xxxxxxxxHello World!
最終的完成長度是20個(gè)字符長度,因此填充的單字符x 并沒有填充20次
如果length長度小于給定字符串的長度,則默認(rèn)返回原字符串,不做填充,代碼示例:
var str1= "Hello World!"; writeToLog("Lpad:" + lpad(str1, "x",5));
此時(shí)最終的輸出結(jié)果為:
2019/08/19 10:46:38 - JavaScript代碼.0 - Lpad:Hello World!
去空字符(ltrim )
從左側(cè)開始去除空字符串
數(shù)字轉(zhuǎn)字符串(num2str )
給定數(shù)字,轉(zhuǎn)換為字符串,主要有3個(gè)構(gòu)造函數(shù):
num2str(num) :轉(zhuǎn)換num數(shù)字為字符串num2str(num,format) :格式化數(shù)字為指定字符串num2str(num,format,iso) :按照本地ISO編碼進(jìn)行格式化
代碼示例如下:
writeToLog(num2str(d1, "0.00")); writeToLog(num2str(d1, "0.00", "EN")); writeToLog(num2str(d2, "0.00;(0.00)", "EN"));
最終控制臺(tái)輸出:
2019/08/19 11:00:17 - JavaScript代碼.0 - 123.4 2019/08/19 11:00:17 - JavaScript代碼.0 - 123.40 2019/08/19 11:00:17 - JavaScript代碼.0 - 123.40 2019/08/19 11:00:17 - JavaScript代碼.0 - (123.40)
XML保護(hù)標(biāo)簽函數(shù)轉(zhuǎn)換(protectXMLCDATA )
傳入給定字符串,添加標(biāo)準(zhǔn)保護(hù),代碼示例
writeToLog(protectXMLCDATA(str1));
此時(shí),將會(huì)給變量str1 加上保護(hù)標(biāo)簽
2019/08/19 11:02:09 - JavaScript代碼.0 - <![CDATA[my home]]>
移除字符串中CRLF字符(removeCRLF(str) )
給定字符串中刪除CR END LF的字符串
替換字符串(replace )
替換字符串主要包括兩個(gè)構(gòu)造函數(shù):
replace(str,searchStr,replaceStr) :從指定字符串中查詢,,然后替換replace(str,firstSearch,firstReplace,secondSearch,SecondReplace...) :無限查詢替換
代碼示例如下:
var str1 = "Hello World, this is a nice function"; var str2 = replace(str1,"World", "Folk"); var str2 = replace(str1,"World", "Folk", "nice","beautifull");
最終輸出:
2019/08/19 11:10:21 - JavaScript代碼.0 - Hello Folk, this is a nice function 2019/08/19 11:10:21 - JavaScript代碼.0 - Hello Folk, this is a beautifull function
字符串右側(cè)填充(rpad(string,char,length ))
使用方法同lpad ,只是一個(gè)是左側(cè),,一個(gè)是右側(cè)
去除空字符(右側(cè))(rtrim )
正則切分(str2RegExp )
出入一個(gè)正則表達(dá)式,對string字符串進(jìn)行Split操作.代碼如下:
var strReg = "^(\\w+)@([a-zA-Z_]+?)\\.([a-zA-Z]{2,3})$"; var xArr = str2RegExp(strToMatch, strReg); for(i=0;i<xArr.length;i++) {
最終控制臺(tái)輸出:
2019/08/19 13:21:19 - JavaScript代碼.0 - info 2019/08/19 13:21:19 - JavaScript代碼.0 - proconis 2019/08/19 13:21:19 - JavaScript代碼.0 - de
字符串截取(substr )
通過制定索引開始對字符串進(jìn)行截取操作,主要有兩個(gè)重構(gòu)參數(shù):
substr(string,from) :指定from索引開始截取字符串substr(string,from,to) :指定開始和截止索引進(jìn)行截取
代碼示例:
var str1= "Hello Pentaho!"; var str2= substr(str1, 6); var str3= substr(str1, 6, 7); writeToLog("Input : " + str1); writeToLog("From position 6: " + str2); writeToLog("From position 6 for 7 long : " + str3);
控制臺(tái)輸出如下:
2019/08/19 13:31:20 - JavaScript代碼.0 - Input : Hello Pentaho! 2019/08/19 13:31:20 - JavaScript代碼.0 - From position 6: Pentaho! 2019/08/19 13:31:20 - JavaScript代碼.0 - From position 6 for 7 long : Pentaho
去除左右空格(trim )
不轉(zhuǎn)義HTML(unEscapeHtml(html) )
針對以轉(zhuǎn)義的HTML字符進(jìn)行解密,代碼如下:
var w='<h2>我是H2標(biāo)題</h2>';
var unesw=unEscapeHtml(esW);
最終控制臺(tái)輸出:
2019/08/19 13:38:16 - JavaScript代碼.0 - <h2>我是H2标题</h2> 2019/08/19 13:38:16 - JavaScript代碼.0 - <h2>我是H2標(biāo)題</h2>
解碼轉(zhuǎn)義XML(unEscapeXml )
字符串轉(zhuǎn)大寫(upper )
將傳入字符串全部轉(zhuǎn)大寫.例如:
浮點(diǎn)型的函數(shù)(Numeric Functions)
計(jì)算絕對值(abs(num) )
計(jì)算一個(gè)數(shù)值的絕對值,代碼示例:
最終控制臺(tái)輸出為:
2019/08/19 13:51:00 - JavaScript代碼.0 - 1234.01 2019/08/19 13:51:00 - JavaScript代碼.0 - 1234.01
最小雙精度值(ceil(num) )
返回最小的雙精度值,。該值將被四舍五入,。代碼示例:
最終控制臺(tái)輸出:
2019/08/19 13:52:40 - JavaScript代碼.0 - -1234 2019/08/19 13:52:40 - JavaScript代碼.0 - 1235
最大數(shù)值(floor(num) )
返回最大數(shù)值,該值將被四舍五入,代碼示例:
運(yùn)行結(jié)果如下:
2019/08/19 13:55:13 - JavaScript代碼.0 - -1235 2019/08/19 13:55:13 - JavaScript代碼.0 - 1234
字符串轉(zhuǎn)數(shù)值(str2num(var) )
字符串轉(zhuǎn)數(shù)值主要包含兩個(gè)構(gòu)造函數(shù),分別是
str2num(str) :傳入數(shù)值字符串,進(jìn)行格式化轉(zhuǎn)換str2num(str,format) :通過指定格式進(jìn)行數(shù)值轉(zhuǎn)換
代碼示例如下:
writeToLog((str2num(str1,"#,##0.00"))); writeToLog((str2num(str2)));
最終控制臺(tái)輸出:
2019/08/19 14:02:19 - JavaScript代碼.0 - 1.234 2019/08/19 14:02:19 - JavaScript代碼.0 - 12
截取數(shù)值(trunc )
trunc(1234.9); // 返回 1234
日期類型函數(shù)(Date Functions)
日期相加(dateAdd )
針對日期變量進(jìn)行相應(yīng)的添加時(shí)間,添加頻率包括年,、月、日,、時(shí),、分、秒 等等
函數(shù)定義:dateAdd(date,format,plusNum)
- date:日期對象
- format:要加的類型
- plusNum:加的數(shù)值
相加類型主要包括:
- y:年
- m:月
- d:日
- w:周
- wd:工作日
- hh:小時(shí)
- mi:分鐘
- ss:秒
代碼示例如下:
var fmt='yyyy-MM-dd HH:mm:ss'; writeToLog("當(dāng)前時(shí)間:"+date2str(d1,fmt)); var py=dateAdd(d1,'y',1);
最終控制臺(tái)輸出:
2019/08/19 14:17:41 - JavaScript代碼.0 - 當(dāng)前時(shí)間:2019-08-19 14:17:41 2019/08/19 14:17:41 - JavaScript代碼.0 - 加1年:2020-08-19 14:17:41
日期比較(dateDiff )
兩個(gè)日期相互比較
函數(shù)定義:dateDiff(startDate,endDate,type)
- startDate:開始日期
- endDate:截止日期
- type:返回相差數(shù)值類型
類型主要包括:
- y:年
- m:月
- d:日
- w:周
- wd:工作日
- hh:小時(shí)
- mi:分鐘
- ss:秒
獲取指定日期數(shù)值(getDayNumber )
根據(jù)類型獲取指定日期的數(shù)值
函數(shù)定義:getDayNumber(date,type)
- date:當(dāng)前日期實(shí)例
- type:類別
類別主要分四類
- y:獲取當(dāng)年的天數(shù)
- m:獲取當(dāng)月的天數(shù)
- w:獲取本周的天數(shù)
- wm:獲取當(dāng)月中本周的天數(shù)
代碼示例:
writeToLog(getDayNumber(d1, "y")); writeToLog(getDayNumber(d1, "m")); writeToLog(getDayNumber(d1, "w")); writeToLog(getDayNumber(d1, "wm"));
getFiscalDate
// Returns the fiscal Date from the date value, // based on a given offset. // 1: Date - The Variable with the Date. // 2: String - The Date/Month which represents // the fiscal Start Offset. Format allways "dd.MM.". Alert(getFiscalDate(d1, str1)); Alert(getFiscalDate(d1, str2));
獲取下一個(gè)工作日日期(getNextWorkingDay )
傳入當(dāng)前日期,獲取該日期后面一個(gè)工作日日期
函數(shù)定義getNextWorkingDay(date)
代碼示例如下:
var d2=str2date('2019-08-19 16:36:00',fmt); var d3=str2date('2019-08-17 16:36:00',fmt);
writeToLog(date2str(getNextWorkingDay(d1),fmt)); writeToLog(date2str(getNextWorkingDay(d2),fmt)); writeToLog(date2str(getNextWorkingDay(d3),fmt));
我們這d2和d3變量中定義了不同的日期實(shí)例,分別是周1和周6,最終通過getNextWorkingDay 能獲取得到下一個(gè)工作日日期,,控制臺(tái)輸出如下:
2019/08/19 16:37:38 - JavaScript代碼.0 - 2019-08-20 16:37:38 2019/08/19 16:37:38 - JavaScript代碼.0 - 2019-08-20 16:36:00 2019/08/19 16:37:38 - JavaScript代碼.0 - 2019-08-19 16:36:00
獲取當(dāng)前月份數(shù)值(month(date) )
獲取當(dāng)前日期的月份數(shù)值,需要注意的是,該值的月份是從0開始的,因此我們最終得到的結(jié)果應(yīng)該+1才是我們的真實(shí)月份數(shù)值,,代碼示例:
var d1 = new Date();//2019/08/19 writeToLog(month(d1)); //最終輸出為7
獲取當(dāng)前時(shí)間的季度值(quarter(date) )
根據(jù)指定日期獲取當(dāng)前季度數(shù)值
var d1 = new Date();//2019/08/19 writeToLog(quarter(d1));//最終輸出為3(代表第三季度)
字符串轉(zhuǎn)日期(str2date )
字符串轉(zhuǎn)日期和日期轉(zhuǎn)字符串有點(diǎn)類似,只不過主體對換了一下,但是傳入的格式參數(shù)都是一樣的,主要有4個(gè)重載函數(shù):
str2date(str) :默認(rèn)轉(zhuǎn)換str2date(str,format) :傳入format格式化參數(shù)str2date(str,format,iso) :根據(jù)iso編碼及格式化參數(shù)進(jìn)行轉(zhuǎn)換str2date(str,format,iso,timezone) :根據(jù)不同時(shí)區(qū)的iso編碼進(jìn)行格式化轉(zhuǎn)換
代碼示例如下:
writeToLog(str2date("01.12.2006","dd.MM.yyyy")); writeToLog(str2date("01.12.2006 23:23:01","dd.MM.yyyy HH:mm:ss")); writeToLog(str2date("Tue.May.2006","E.MMM.yyyy","EN")); writeToLog(str2date("22.02.2008 23:23:01","dd.MM.yyyy HH:mm:ss","DE")); writeToLog(str2date("22.02.2008 23:23:01","dd.MM.yyyy HH:mm:ss","DE", "EST"));
截取日期(truncDate(date,type) )
指定截取不同的日期部分,函數(shù)定義truncDate(date,type)
- date:當(dāng)前日期實(shí)例
- type:截取類型
類型主要有6中,分別是整型,,從0-5:
- 5:截取月份
- 4:截取天數(shù)
- 3:截取小時(shí)
- 2:截取分鐘
- 1:截取秒
- 0:截取毫秒
代碼示例 如下:
var dateTime = new Date(); var date0 = truncDate(dateTime, 0); // gives back today at yyyy/MM/dd HH:mm:ss.000 var date1 = truncDate(dateTime, 1); // gives back today at yyyy/MM/dd HH:mm:00.000 var date2 = truncDate(dateTime, 2); // gives back today at yyyy/MM/dd HH:00:00.000 var date3 = truncDate(dateTime, 3); // gives back today at yyyy/MM/dd 00:00:00.000 var date4 = truncDate(dateTime, 4); // gives back today at yyyy/MM/01 00:00:00.000 var date5 = truncDate(dateTime, 5); // gives back today at yyyy/01/01 00:00:00.000
獲取當(dāng)年的周數(shù)(week )
獲取指定日期的周數(shù),代碼示例:
var d1 = new Date(); //2019/08/19
writeToLog(week(d1));// 返回34
獲取年份(year )
獲取傳入日期的年份,代碼示例:
var d1 = new Date(); //2019/08/19
writeToLog(year(d1));// 返回2019
邏輯判斷型函數(shù)(Logic Functions)
isCodepage
判斷字符串的codepage項(xiàng),代碼示例:
writeToLog(isCodepage(xStr, "UTF-8"));// true writeToLog(isCodepage(xStr, "windows-1250"));// true
是否日期(isDate(str) )
判斷當(dāng)前字符串是否日期
writeToLog(isDate(d1));//false writeToLog(isDate(d2));//true
是否為空(isEmpty(str) )
判斷字符串是否為空
Alert(isEmpty(d));//false
判斷字符串是否為郵箱標(biāo)準(zhǔn)格式(isMailValid(str) )
判斷一個(gè)字符串是否是郵箱
判斷是否是數(shù)值(isNum(str) )
判斷一個(gè)字符串是否是數(shù)值
var str1 = "Hello World"; Alert(isNum(str1));//false Alert(isNum(str2));//true
是否正則匹配(isRegExp )
判斷給定的正則表達(dá)式是否匹配當(dāng)前的字符串,,主要有2個(gè)函數(shù)定義:
- isRegExp(str,reg):給定正則判斷字符串是否匹配
- isRegExp(str,reg1,reg2,reg3…);可以遞歸判斷正則匹配
最終返回的是匹配的次數(shù)數(shù)值,如果不匹配,返回-1
代碼示例如下:
var email3= "HelloWorld@x";
var reg1="^\\w+@[a-zA-Z_]+?\\.[a-zA-Z]{2,3}$"; var reg2="^[\\w-\.]+@([\\w-]+\\.)+[\\w-]{2,4}$";
writeToLog(isRegExp(email1, reg1,reg2) + " Matches"); //1 writeToLog(isRegExp(email2, reg1,reg2) + " Matches"); //2 writeToLog(isRegExp(email3, reg1,reg2) + " Matches");// 1
是否工作日(isWorkingDay(date) )
判斷某日期是否是工作日,代碼示例:
var d2=str2date('2019-08-17','yyyy-MM-dd') //周六 writeToLog(isWorkingDay(d1));//true writeToLog(isWorkingDay(d2));//false
特殊的函數(shù)(Special Functions)
彈框信息(Alert(msg) )
在屏幕前彈出一個(gè)信息框
加載JavaScript文件(LoadScriptFile )
將一個(gè)javascript文件加載到實(shí)際的運(yùn)行上下文中,。應(yīng)該從定義的StartScript調(diào)用此函數(shù),,否則,每次處理都會(huì)加載javascript文件行,。
代碼示例如下:
var xPfad = "F:/bak/Hello.js";
此時(shí),我們的外部JS文件僅僅是包含一句簡單的輸出,,如下:
writeToLog("Hello LoadScriptFile,outSide JS File ");
最終運(yùn)行時(shí),控制臺(tái)會(huì)打印出我們在外部JS中的輸出行
從當(dāng)前Tab欄加載JS并運(yùn)行(LoadScriptFromTab )
如果我們在當(dāng)前的JavaScript組件中通過模塊化的方式編寫了很多腳本代碼,我們可以通過LoadScriptFromTab 函數(shù)進(jìn)行相互調(diào)用,這對于開發(fā)抽象來說是很好的,代碼示例如下:
writeToLog("外部Tab加載JS-------------------------") LoadScriptFromTab('Item_1');
有效卡號判斷(LuhnCheck )
如果給定的是一個(gè)有效的卡號,則返回true
var str1 = "4444333322221111"; writeToLog(str1 + ": " + LuhnCheck(str1)); //true
var str2 = "4444333322221110"; writeToLog(str2 + ": " + LuhnCheck(str2));//false
向文件中追加數(shù)據(jù)(appendToFile )
向指定文件中追加數(shù)據(jù),如果文件不存在則創(chuàng)建文件
var file = "F:/bak/log.txt";
appendToFile(file,'TEST'+i+"\r\n");
此時(shí),該代碼會(huì)向log.txt 文件輸出100條數(shù)據(jù)行
decode函數(shù)
decode函數(shù)有點(diǎn)類似于IF-THEN-ELSE 語句,即表示通過給定查詢的字符串是否存在,,如果存在,,即替換,否則返回默認(rèn)值
代碼示例:
writeToLog(decode(str1, "Hallo", "Hello")); writeToLog(decode(str1, "1", "Mr", "2", "Mrs", "N/A")); writeToLog(decode(str1, "1", "Mr", "2", "Mrs")); writeToLog(decode(str1, "1", "Mr", "2", "Mrs"));
控制臺(tái)輸出:
2019/08/19 17:39:01 - JavaScript代碼.0 - Hello 2019/08/19 17:39:01 - JavaScript代碼.0 - N/A 2019/08/19 17:39:01 - JavaScript代碼.0 - Hallo 2019/08/19 17:39:01 - JavaScript代碼.0 - Mrs
執(zhí)行命令(execProcess )
代碼如下:
var t=execProcess('ping www.baidu.com');
調(diào)用命令行,ping百度的網(wǎng)址,最終輸出返回?cái)?shù)據(jù)
執(zhí)行SQL語句(fireToDB )
通過獲取數(shù)據(jù)庫連接名稱,,傳遞SQL語句,以返回SQL查詢的值,函數(shù)定義:
- fireToDB(connectionName,SQL),;第一個(gè)參數(shù)為數(shù)據(jù)庫連接名稱,,我們在JNDI中定義的名稱,第二個(gè)參數(shù)為SQL語句
var strConn = "MY Connection"; var strSQL = "SELECT COUNT(*) FROM ..."; var xArr = fireToDB(strConn, strSQL);
僅僅獲取數(shù)值(getDigitsOnly )
在給定的字符串中僅僅篩選過濾得到數(shù)值,,代碼如下:
writeToLog(getDigitsOnly(str1));//返回123
獲取Kettle環(huán)境變量的值(getEnvironmentVar )
獲取在Kettle中的環(huán)境變量的值
writeToLog(getEnvironmentVar("user.dir")); writeToLog(getEnvironmentVar("user.name"));
獲取當(dāng)前進(jìn)程的受影響行數(shù)(getProcessCount(type) )
根據(jù)類型獲取當(dāng)前進(jìn)程的受影響行數(shù),,類型如下:
- u:更新行數(shù)
- i:插入行數(shù)
- w:寫入行數(shù)
- r:讀取行數(shù)
- o:輸出行數(shù)
writeToLog(getProcessCount("u")); writeToLog(getProcessCount("r"));
獲取當(dāng)前轉(zhuǎn)換名稱(getTransformationName )
獲取當(dāng)前的轉(zhuǎn)換名稱
var xTranName = getTransformationName();
獲取Kettle環(huán)境中的變量值(getVariable )
從當(dāng)前的Kettle環(huán)境中獲取指定的變量值,目前函數(shù)有2個(gè)重載:
- getVariable(varName);根據(jù)變量名稱獲取變量值
- getVariable(varName,defaultValue):根據(jù)變量名獲取值,如果不存在則使用默認(rèn)值
var strVarName="getVariableTest"; var strVarValue="123456"; Alert(getVariable(strVarName, "")); setVariable(strVarName,strVarValue, "r"); Alert(getVariable(strVarName, "")); setVariable(strVarName,strVarValue, "r"); Alert(getVariable(strVarName, ""));
控制臺(tái)打印(println )
var str = "Hello World!";
移除數(shù)值(removeDigits )
移除給定字符串中的數(shù)值,,代碼示例:
writeToLog(removeDigits(str1));//返回abccde
發(fā)送郵件
設(shè)置環(huán)境變量(setEnvironmentVar )
通過在Script腳本組件中調(diào)用函數(shù)重新設(shè)置Kettle的環(huán)境變量
var strVarName="setEnvTest"; var strVarValue="123456"; Alert(getEnvironmentVar(strVarName)); setEnvironmentVar(strVarName,strVarValue); Alert(getEnvironmentVar(strVarName)); setEnvironmentVar(strVarName,strVarValue); Alert(getEnvironmentVar(strVarName));
設(shè)置變量(setVariable )
通過setVariable 函數(shù)設(shè)置環(huán)境變量,該用途可以用于重新賦值Kettle環(huán)境中已經(jīng)存在的變量值或者重新生成變量值
函數(shù)定義setVariable(key,value,level)
- key:變量名稱
- value:變量值
- level:級別,主要包括s(system),、r(root)、p(parent),、g(grandparent)四種類別
代碼示例如下:
var strVarName="setEnvTest"; var strVarValue="123456"; Alert(getVariable(strVarName, "")); setVariable(strVarName,strVarValue, "r"); Alert(getVariable(strVarName, "")); setVariable(strVarName,strVarValue, "r"); Alert(getVariable(strVarName, ""));
寫入日志(writeToLog )
打印并寫入日志信息,該函數(shù)可能是我們用到的最多的函數(shù),可以幫助我們調(diào)試信息,主要有兩個(gè)重載:
- writeToLog(msg):寫入msg日志信息
- writeToLog(level,msg):根據(jù)level基本寫入msg信息
關(guān)于日志的級別,這里主要是簡寫的方式,主要如下:
- d(Debug):調(diào)試模式
- l(Detailed):詳細(xì)
- e(Error):錯(cuò)誤
- m(Minimal):最小日志
- r(RowLevel):行級日志
writeToLog("Hello World!"); writeToLog("r", "Hello World!");
文件處理類函數(shù)(File Functions)
復(fù)制文件(copyFile )
復(fù)制一個(gè)文件到目標(biāo)目錄,函數(shù)定義如下:
copyFile(sourceFile,targetFile,overwrite)
- sourceFile:源文件
- targetFile:目標(biāo)文件
- overWrite:是否覆蓋,如果目標(biāo)文件存在的話,布爾類型
var file1 = "F:/bak/log.txt";
var targetFile="F:/bak/logTarget.txt";
copyFile(file1,targetFile,false)
創(chuàng)建文件夾(createFolder )
創(chuàng)建一個(gè)文件夾,代碼示例如下:
var strFolder = "F:/bak/createFolder";
刪除文件(deleteFile )
刪除一個(gè)文件(不能刪除文件夾)
var targetFile="F:/bak/logTarget.txt";
判斷文件是否存在(fileExists() )
判斷文件是否存在
var targetFile="F:/bak/logTarget.txt";
獲取文件擴(kuò)展名(getFileExtension )
如果文件不存在,則返回null,代碼示例
var file1 = "F:/bak/log.txt";
var ext=getFileExtension(file1); writeToLog("擴(kuò)展名:"+ext)
獲取文件大小(getFileSize )
獲取文件大小,結(jié)果是一個(gè)long類型的長整型數(shù)值
var file1 = "F:/bak/log.txt";
var ext=getFileSize(file1);
獲取文件最后修改日期(getLastModifiedTime )
獲取文件最后修改日期,函數(shù)定義:
getLastModifiedTime(filePath,format)
- filePath:文件路徑
- format:日期格式化
var file1 = "F:/bak/log.txt";
var ext=getLastModifiedTime(file1,"yyyy-MM-dd HH:mm:ss");
獲取文件的父文件夾名稱(getParentFoldername )
獲取文件的父文件夾名稱
var file1 = "F:/bak/log.txt"; var parentFolder=getParentFoldername(file1);
獲取文件簡稱(getShortName )
獲取文件簡稱
var file1 = "F:/bak/log.txt"; var shortName=getShortFilename(file1);
writeToLog("簡單名稱:"+shortName)//返回log.txt
判斷是否是一個(gè)文件(isFile )
判斷是否是一個(gè)文件
var file1 = "F:/bak/log.txt"; var flag=isFile(file1) //true
判斷是否是一個(gè)文件夾(isFolder )
判斷是否是一個(gè)文件夾
var file1 = "F:/bak/log.txt"; var flag=isFolder(file1) //false
加載一個(gè)文件的內(nèi)容(loadFileContent )
從指定文件中加載內(nèi)容,主要有兩個(gè)重載函數(shù):
- loadFileContent(filePath):默認(rèn)加載文件
- loadFileContent(filePath,encoding):指定編碼加載文件內(nèi)容
代碼示例:
var file1 = "F:/bak/log.txt"; var content=loadFileContent(file1); var c1=loadFileContent(file1,"UTF-8")
移動(dòng)文件(moveFile )
移動(dòng)指定文件,函數(shù)定義moveFile(source,target,overWrite)
- source:源文件
- target:目標(biāo)文件
- overWrite,;是否覆蓋,如果目標(biāo)文件存在,布爾類型值
var file1 = "F:/bak/log.txt"; var targetFile="F:/bak/logTarget.txt";
moveFile(file1,targetFile,false)
創(chuàng)建一個(gè)空文件(touch )
創(chuàng)建一個(gè)空文件
var strFile = "F:/bak/log.txt";
總結(jié)
以上就是Kettle 8.3版本中的內(nèi)置函數(shù)方法,方法很多,寫這篇博客也是很累,算是全部都學(xué)習(xí)了一遍,腦子里已經(jīng)記憶了一遍,但是我們也不需要死記硬背,就和我們學(xué)些Linux命令一樣,如果你知道man 命令,,對某個(gè)命令不是很了解的話直接通過man命令學(xué)習(xí)即可.
Kettle也是如此,對于某個(gè)函數(shù)不是很了解的話,右鍵點(diǎn)擊該函數(shù),會(huì)出現(xiàn)sample 字樣菜單,點(diǎn)擊該菜單即可彈出該函數(shù)的介紹和使用信息,里面包含了該函數(shù)的調(diào)用示例和函數(shù)詳細(xì)介紹,也是很人性化的.
|