本文鏈接: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參數類型供參考:
- yy / yyyy - 06 / 2006
- MM / MMM / MMMMM - 11 / Nov / November
- d / dd - 1 / 01
- E / EEEE - Tue / Tuesday
- hh / HH - 11 / 23
- m / mm - 5 / 05
- s / ss - 8 / 08
代碼示例:
- var dValue = new Date();
- 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"));
以上代碼在控制台將會輸出如下:
- 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
轉義HTMLescapeHtml(html)
代碼如下:
- var html="<h1>我是H2標題</h2>";
- writeToLog(escapeHtml(html))
最終輸出
2019/08/19 10:16:13 - JavaScript代碼.0 - <h1>我是H2标题</h2>
轉義SQL(escapeSQL(var))
- var str1 = "SELECT * FROM CUSTOMER WHERE NAME='" + escapeSQL("McHale's Navy") + "'";
- writeToLog(str1)
該函數會把單引號轉成雙引號,輸出結果如下:
2019/08/19 10:18:59 - JavaScript代碼.0 - SELECT * FROM CUSTOMER WHERE NAME='McHale''s Navy'
構造定長字符串(fillString(char,length))
代碼示例如下:
- writeToLog(fillString("x",10));
- writeToLog(fillString("A",3));
最終會輸出10個X和3個A,輸出結果如下:
- 2019/08/19 10:24:08 - JavaScript代碼.0 - xxxxxxxxxx
- 2019/08/19 10:24:08 - JavaScript代碼.0 - AAA
需要注意的是第一個是一個char類型的單字符,不能是字符串
統計字符串出現頻次(getOcuranceString(str,searchStr))
第一個參數是要搜索的完整字符串,第二個參數是要搜索統計的字符串
代碼示例:
- var sef='2007-09-11';
- writeToLog(getOcuranceString(sef,'0'))
- writeToLog(getOcuranceString(sef,'00'))
我們分別統計字符串0和00最終出現的次數,此時,日志最終打印的次數是3和1:
- 2019/08/19 10:28:45 - JavaScript代碼.0 - 3
- 2019/08/19 10:28:45 - JavaScript代碼.0 - 1
獲取字符串下標索引(indexOf)
獲取下標索引主要有2個重構函數,分別是:
- indexOf(string,subString):獲取出現字符串的索引開始位置
- 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);
最終控制台輸出:
- 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)
對指定字符串首字母大寫處理,來看代碼示例:
- var str1 = "my home";
- writeToLog(initCap(str1));
- writeToLog(initCap('test a aaa cw'));
- writeToLog(initCap('myhome'));
此時,最終控制台輸出如下:
- 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
字符串轉小寫(lower)
將傳入字符串全部轉小寫
代碼如下:
- var str1= "Hello World!";
- var str2= lower(str1);
- writeToLog("Input:" + str1);
- writeToLog("Converted to LowerCase:" + str2);
- writeToLog(lower('DDDHelloSWxss'))
響應內容
- 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
字符串填充左側(lpad(string,char,length))
用指定長度的給定字符將字符串填充到左側
參數定義:
- 1:傳入字符串
- 2:填充單字符
- 3:填充單字符長度
如果length長度超過給定字符串的長度,將對填充字符串做減法,例如:
- var str1= "Hello World!";
- writeToLog("Lpad:" + lpad(str1, "x",20));
此時,最終輸出結果為:
2019/08/19 10:46:38 - JavaScript代碼.0 - Lpad:xxxxxxxxHello World!
最終的完成長度是20個字符長度,因此填充的單字符x並沒有填充20次
如果length長度小於給定字符串的長度,則默認返回原字符串,不做填充,代碼示例:
- var str1= "Hello World!";
- 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編碼進行格式化
代碼示例如下:
- var d1 = 123.40;
- var d2 = -123.40;
- writeToLog(num2str(d1));
- writeToLog(num2str(d1, "0.00"));
- writeToLog(num2str(d1, "0.00", "EN"));
- writeToLog(num2str(d2, "0.00;(0.00)", "EN"));
最終控制台輸出:
- 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保護標簽函數轉換(protectXMLCDATA)
傳入給定字符串,添加標准保護,代碼示例
- var str1 = "my home";
- writeToLog(protectXMLCDATA(str1));
此時,將會給變量str1加上保護標簽
- 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...):無限查詢替換
代碼示例如下:
- var str1 = "Hello World, this is a nice function";
- var str2 = replace(str1,"World", "Folk");
- writeToLog(str2);
- var str2 = replace(str1,"World", "Folk", "nice","beautifull");
- writeToLog(str2);
最終輸出:
- 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
字符串右側填充(rpad(string,char,length))
使用方法同lpad,只是一個是左側,一個是右側
去除空字符(右側)(rtrim)
正則切分(str2RegExp)
出入一個正則表達式,對string字符串進行Split操作.代碼如下:
- var strToMatch = "info@proconis.de";
- var strReg = "^(\\w+)@([a-zA-Z_]+?)\\.([a-zA-Z]{2,3})$";
- var xArr = str2RegExp(strToMatch, strReg);
- if ( xArr != null ) {
- for(i=0;i<xArr.length;i++) {
- writeToLog(xArr[i]);
- }
- }
- else {
- writeToLog("no match");
- }
最終控制台輸出:
- 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)
通過制定索引開始對字符串進行截取操作,主要有兩個重構參數:
- substr(string,from):指定from索引開始截取字符串
- substr(string,from,to):指定開始和截止索引進行截取
代碼示例:
- 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);
控制台輸出如下:
- 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)
不轉義HTML(unEscapeHtml(html))
針對以轉義的HTML字符進行解密,代碼如下:
- var w='<h2>我是H2標題</h2>';
- var esW=escapeHtml(w);
- var unesw=unEscapeHtml(esW);
- writeToLog(esW);
- writeToLog(unesw);
最終控制台輸出:
- 2019/08/19 13:38:16 - JavaScript代碼.0 - <h2>我是H2标题</h2>
- 2019/08/19 13:38:16 - JavaScript代碼.0 - <h2>我是H2標題</h2>
解碼轉義XML(unEscapeXml )
字符串轉大寫(upper)
將傳入字符串全部轉大寫.例如:
- var str="Hello World";
- writeToLog(upper(str));
浮點型的函數(Numeric Functions)
計算絕對值(abs(num))
計算一個數值的絕對值,代碼示例:
- var d1 = -1234.01;
- var d2 = 1234.01;
- writeToLog(abs(d1));
- writeToLog(abs(d2));
最終控制台輸出為:
- 2019/08/19 13:51:00 - JavaScript代碼.0 - 1234.01
- 2019/08/19 13:51:00 - JavaScript代碼.0 - 1234.01
最小雙精度值(ceil(num))
返回最小的雙精度值。該值將被四舍五入。代碼示例:
- var d1 = -1234.01;
- var d2 = 1234.01;
- writeToLog(ceil(d1));
- writeToLog(ceil(d2));
最終控制台輸出:
- 2019/08/19 13:52:40 - JavaScript代碼.0 - -1234
- 2019/08/19 13:52:40 - JavaScript代碼.0 - 1235
最大數值(floor(num))
返回最大數值,該值將被四舍五入,代碼示例:
- var d1 = -1234.01;
- var d2 = 1234.01;
- writeToLog(floor(d1));
- writeToLog(floor(d2));
運行結果如下:
- 2019/08/19 13:55:13 - JavaScript代碼.0 - -1235
- 2019/08/19 13:55:13 - JavaScript代碼.0 - 1234
字符串轉數值(str2num(var))
字符串轉數值主要包含兩個構造函數,分別是
- str2num(str):傳入數值字符串,進行格式化轉換
- str2num(str,format):通過指定格式進行數值轉換
代碼示例如下:
- var str1 = "1.234,56";
- var str2 = "12";
- writeToLog((str2num(str1,"#,##0.00")));
- writeToLog((str2num(str2)));
最終控制台輸出:
- 2019/08/19 14:02:19 - JavaScript代碼.0 - 1.234
- 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:秒
代碼示例如下:
- var d1 = new Date();
- var fmt='yyyy-MM-dd HH:mm:ss';
- writeToLog("當前時間:"+date2str(d1,fmt));
- var py=dateAdd(d1,'y',1);
- var fy=date2str(py,fmt);
- writeToLog("加1年:"+fy);
最終控制台輸出:
- 2019/08/19 14:17:41 - JavaScript代碼.0 - 當前時間:2019-08-19 14:17:41
- 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:獲取當月中本周的天數
代碼示例:
- var d1 = new Date();
- 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.
- //
- // Usage:
- // getFiscalDate(var);
- // 1: Date - The Variable with the Date.
- // 2: String - The Date/Month which represents
- // the fiscal Start Offset. Format allways "dd.MM.".
- //
- // 2006-11-15
- //
- var d1 = new Date();
- var str1 = "01.07.";
- var str2 = "10.12.";
- Alert(getFiscalDate(d1, str1));
- Alert(getFiscalDate(d1, str2));
獲取下一個工作日日期(getNextWorkingDay)
傳入當前日期,獲取該日期后面一個工作日日期
函數定義getNextWorkingDay(date)
代碼示例如下:
- var d1 = new Date();
- // 周1
- var d2=str2date('2019-08-19 16:36:00',fmt);
- //周 6
- 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變量中定義了不同的日期實例,分別是周1和周6,最終通過getNextWorkingDay能獲取得到下一個工作日日期,控制台輸出如下:
- 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
獲取當前月份數值(month(date))
獲取當前日期的月份數值,需要注意的是,該值的月份是從0開始的,因此我們最終得到的結果應該+1才是我們的真實月份數值,代碼示例:
- var d1 = new Date();//2019/08/19
- writeToLog(month(d1)); //最終輸出為7
獲取當前時間的季度值(quarter(date))
根據指定日期獲取當前季度數值
- var d1 = new Date();//2019/08/19
- writeToLog(quarter(d1));//最終輸出為3(代表第三季度)
字符串轉日期(str2date)
字符串轉日期和日期轉字符串有點類似,只不過主體對換了一下,但是傳入的格式參數都是一樣的,主要有4個重載函數:
- str2date(str):默認轉換
- str2date(str,format):傳入format格式化參數
- str2date(str,format,iso):根據iso編碼及格式化參數進行轉換
- str2date(str,format,iso,timezone):根據不同時區的iso編碼進行格式化轉換
代碼示例如下:
- 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))
指定截取不同的日期部分,函數定義truncDate(date,type)
- date:當前日期實例
- type:截取類型
類型主要有6中,分別是整型,從0-5:
- 5:截取月份
- 4:截取天數
- 3:截取小時
- 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
獲取當年的周數(week)
獲取指定日期的周數,代碼示例:
- var d1 = new Date(); //2019/08/19
- writeToLog(week(d1));// 返回34
獲取年份(year)
獲取傳入日期的年份,代碼示例:
- var d1 = new Date(); //2019/08/19
- writeToLog(year(d1));// 返回2019
邏輯判斷型函數(Logic Functions)
isCodepage
判斷字符串的codepage項,代碼示例:
- var xStr = "Réal";
- writeToLog(isCodepage(xStr, "UTF-8"));// true
- writeToLog(isCodepage(xStr, "windows-1250"));// true
是否日期(isDate(str))
判斷當前字符串是否日期
- var d1 = "Hello World";
- var d2 = new Date();
- writeToLog(isDate(d1));//false
- writeToLog(isDate(d2));//true
是否為空(isEmpty(str))
判斷字符串是否為空
- var d = "Hello World";
- Alert(isEmpty(d));//false
判斷字符串是否為郵箱標准格式(isMailValid(str))
判斷一個字符串是否是郵箱
判斷是否是數值(isNum(str))
判斷一個字符串是否是數值
- var str1 = "Hello World";
- var str2 = 123456;
- Alert(isNum(str1));//false
- Alert(isNum(str2));//true
是否正則匹配(isRegExp)
判斷給定的正則表達式是否匹配當前的字符串,主要有2個函數定義:
- isRegExp(str,reg):給定正則判斷字符串是否匹配
- isRegExp(str,reg1,reg2,reg3…);可以遞歸判斷正則匹配
最終返回的是匹配的次數數值,如果不匹配,返回-1
代碼示例如下:
- var email1 ="info@proconis.de";
- var email2= "support@proconis.co.uk";
- 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 d1 = new Date();//周1
- var d2=str2date('2019-08-17','yyyy-MM-dd') //周六
- writeToLog(isWorkingDay(d1));//true
- writeToLog(isWorkingDay(d2));//false
特殊的函數(Special Functions)
彈框信息(Alert(msg))
在屏幕前彈出一個信息框
加載JavaScript文件(LoadScriptFile)
將一個javascript文件加載到實際的運行上下文中。應該從定義的StartScript調用此函數,否則,每次處理都會加載javascript文件行。
代碼示例如下:
- var xPfad = "F:/bak/Hello.js";
- LoadScriptFile(xPfad);
此時,我們的外部JS文件僅僅是包含一句簡單的輸出,如下:
writeToLog("Hello LoadScriptFile,outSide JS File ");
最終運行時,控制台會打印出我們在外部JS中的輸出行
從當前Tab欄加載JS並運行(LoadScriptFromTab)
如果我們在當前的JavaScript組件中通過模塊化的方式編寫了很多腳本代碼,我們可以通過LoadScriptFromTab函數進行相互調用,這對於開發抽象來說是很好的,代碼示例如下:
- writeToLog("外部Tab加載JS-------------------------")
- LoadScriptFromTab('Item_1');
有效卡號判斷(LuhnCheck)
如果給定的是一個有效的卡號,則返回true
- var str1 = "4444333322221111";
- writeToLog(str1 + ": " + LuhnCheck(str1)); //true
- var str2 = "4444333322221110";
- writeToLog(str2 + ": " + LuhnCheck(str2));//false
向文件中追加數據(appendToFile)
向指定文件中追加數據,如果文件不存在則創建文件
- var file = "F:/bak/log.txt";
- for(var i=0;i<100;i++){
- appendToFile(file,'TEST'+i+"\r\n");
- }
此時,該代碼會向log.txt文件輸出100條數據行
decode函數
decode函數有點類似於IF-THEN-ELSE語句,即表示通過給定查詢的字符串是否存在,如果存在,即替換,否則返回默認值
代碼示例:
- var str1 = "Hallo";
- writeToLog(decode(str1, "Hallo", "Hello"));
- writeToLog(decode(str1, "1", "Mr", "2", "Mrs", "N/A"));
- writeToLog(decode(str1, "1", "Mr", "2", "Mrs"));
- str1 = "Mrs";
- writeToLog(decode(str1, "1", "Mr", "2", "Mrs"));
控制台輸出:
- 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
執行命令(execProcess)
代碼如下:
- var t=execProcess('ping www.baidu.com');
- writeToLog(t)
調用命令行,ping百度的網址,最終輸出返回數據
執行SQL語句(fireToDB)
通過獲取數據庫連接名稱,傳遞SQL語句,以返回SQL查詢的值,函數定義:
- fireToDB(connectionName,SQL);第一個參數為數據庫連接名稱,我們在JNDI中定義的名稱,第二個參數為SQL語句
- var strConn = "MY Connection";
- var strSQL = "SELECT COUNT(*) FROM ...";
- var xArr = fireToDB(strConn, strSQL);
僅僅獲取數值(getDigitsOnly)
在給定的字符串中僅僅篩選過濾得到數值,代碼如下:
- var str1 = "abc123cde";
- writeToLog(getDigitsOnly(str1));//返回123
獲取Kettle環境變量的值(getEnvironmentVar)
獲取在Kettle中的環境變量的值
- writeToLog(getEnvironmentVar("user.dir"));
- writeToLog(getEnvironmentVar("user.name"));
獲取當前進程的受影響行數(getProcessCount(type))
根據類型獲取當前進程的受影響行數,類型如下:
- u:更新行數
- i:插入行數
- w:寫入行數
- r:讀取行數
- o:輸出行數
- writeToLog(getProcessCount("u"));
- writeToLog(getProcessCount("r"));
獲取當前轉換名稱(getTransformationName)
獲取當前的轉換名稱
- var xTranName = getTransformationName();
- writeToLog(xTranName);
獲取Kettle環境中的變量值(getVariable)
從當前的Kettle環境中獲取指定的變量值,目前函數有2個重載:
- getVariable(varName);根據變量名稱獲取變量值
- getVariable(varName,defaultValue):根據變量名獲取值,如果不存在則使用默認值
- var strVarName="getVariableTest";
- var strVarValue="123456";
- Alert(getVariable(strVarName, ""));
- setVariable(strVarName,strVarValue, "r");
- Alert(getVariable(strVarName, ""));
- strVarValue="654321";
- setVariable(strVarName,strVarValue, "r");
- Alert(getVariable(strVarName, ""));
控制台打印(println)
- var str = "Hello World!";
- print(str);
移除數值(removeDigits)
移除給定字符串中的數值,代碼示例:
- var str1 = "abc123cde";
- writeToLog(removeDigits(str1));//返回abccde
發送郵件
設置環境變量(setEnvironmentVar)
通過在Script腳本組件中調用函數重新設置Kettle的環境變量
- var strVarName="setEnvTest";
- var strVarValue="123456";
- Alert(getEnvironmentVar(strVarName));
- setEnvironmentVar(strVarName,strVarValue);
- Alert(getEnvironmentVar(strVarName));
- strVarValue="654321";
- setEnvironmentVar(strVarName,strVarValue);
- Alert(getEnvironmentVar(strVarName));
設置變量(setVariable)
通過setVariable函數設置環境變量,該用途可以用於重新賦值Kettle環境中已經存在的變量值或者重新生成變量值
函數定義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, ""));
- strVarValue="654321";
- setVariable(strVarName,strVarValue, "r");
- Alert(getVariable(strVarName, ""));
寫入日志(writeToLog)
打印並寫入日志信息,該函數可能是我們用到的最多的函數,可以幫助我們調試信息,主要有兩個重載:
- writeToLog(msg):寫入msg日志信息
- writeToLog(level,msg):根據level基本寫入msg信息
關於日志的級別,這里主要是簡寫的方式,主要如下:
- d(Debug):調試模式
- l(Detailed):詳細
- e(Error):錯誤
- m(Minimal):最小日志
- r(RowLevel):行級日志
- writeToLog("Hello World!");
- writeToLog("r", "Hello World!");
文件處理類函數(File Functions)
復制文件(copyFile)
復制一個文件到目標目錄,函數定義如下:
copyFile(sourceFile,targetFile,overwrite)
- sourceFile:源文件
- targetFile:目標文件
- overWrite:是否覆蓋,如果目標文件存在的話,布爾類型
- var file1 = "F:/bak/log.txt";
- var targetFile="F:/bak/logTarget.txt";
- copyFile(file1,targetFile,false)
創建文件夾(createFolder)
創建一個文件夾,代碼示例如下:
- var strFolder = "F:/bak/createFolder";
- createFolder(strFolder);
刪除文件(deleteFile)
刪除一個文件(不能刪除文件夾)
- var targetFile="F:/bak/logTarget.txt";
- deleteFile(targetFile);
判斷文件是否存在(fileExists())
判斷文件是否存在
- var targetFile="F:/bak/logTarget.txt";
- fileExists(targetFile);
獲取文件擴展名(getFileExtension)
如果文件不存在,則返回null,代碼示例
- var file1 = "F:/bak/log.txt";
- var ext=getFileExtension(file1);
- writeToLog("擴展名:"+ext)
獲取文件大小(getFileSize)
獲取文件大小,結果是一個long類型的長整型數值
- var file1 = "F:/bak/log.txt";
- var ext=getFileSize(file1);
- writeToLog("大小:"+ext)
獲取文件最后修改日期(getLastModifiedTime)
獲取文件最后修改日期,函數定義:
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
判斷是否是一個文件(isFile)
判斷是否是一個文件
- var file1 = "F:/bak/log.txt";
- var flag=isFile(file1) //true
判斷是否是一個文件夾(isFolder)
判斷是否是一個文件夾
- var file1 = "F:/bak/log.txt";
- var flag=isFolder(file1) //false
加載一個文件的內容(loadFileContent)
從指定文件中加載內容,主要有兩個重載函數:
- loadFileContent(filePath):默認加載文件
- loadFileContent(filePath,encoding):指定編碼加載文件內容
代碼示例:
- var file1 = "F:/bak/log.txt";
- var content=loadFileContent(file1);
- var c1=loadFileContent(file1,"UTF-8")
- writeToLog(content)
移動文件(moveFile)
移動指定文件,函數定義moveFile(source,target,overWrite)
- source:源文件
- target:目標文件
- overWrite;是否覆蓋,如果目標文件存在,布爾類型值
- var file1 = "F:/bak/log.txt";
- var targetFile="F:/bak/logTarget.txt";
- moveFile(file1,targetFile,false)
創建一個空文件(touch)
創建一個空文件
- var strFile = "F:/bak/log.txt";
- touch(strFile);
總結
以上就是Kettle 8.3版本中的內置函數方法,方法很多,寫這篇博客也是很累,算是全部都學習了一遍,腦子里已經記憶了一遍,但是我們也不需要死記硬背,就和我們學些Linux命令一樣,如果你知道man命令,對某個命令不是很了解的話直接通過man命令學習即可.
Kettle也是如此,對於某個函數不是很了解的話,右鍵點擊該函數,會出現sample字樣菜單,點擊該菜單即可彈出該函數的介紹和使用信息,里面包含了該函數的調用示例和函數詳細介紹,也是很人性化的.