作成日: 2009年7月1日 |
作成者:ハイミン・エンタープライズ(株) |
千葉 博胤
佐藤 弘一 |
最終更新日: 2009年7月1日 |
ColdFusionの関数の紹介・前編
前回の連載第1回では、ColdFusionの多彩なタグの紹介をしました。他言語では面倒な機能でも、ColdFusionのタグでは驚くほど簡単に実装できることを体感できたかと思います。
今回の連載第2回では前編・後編に分けて、ColdFusionの関数を紹介いたします。多くの言語にある基本的な関数をはじめ、タグと同様多彩な関数が用意されています。その一部ですが紹介したいと思います。第1回記事と同様、サンプルソースはそのままコピー&ペーストで実行できるようにしてあります。是非実際に動かしてみてください。
ColdFusion関数
■文字列関数
Left/Right/Mid/Len/Trim/Replace/REReplace
■日付/時刻関連関数
DateFormat/TimeFormat/CreateDate/IsLeapYear/DateDiff/DateCompare/DateAdd
■Array関連関数
ArrayNew/ArrayIsEmpty/ArrayAppend/ArrayLen/ArrayToList/ListToArray/
ArrayDeleteAt/ArrayInsertAt
■List関連関数
ListFind/ListGetAt/ListLen
文字列の操作を行います。
○Left/Right/Mid
まずは基本的な文字列関数です。
文字列を左(Left)、右(Right)、指定の位置(Mid)から、指定の文字数分抜き出します。
例)
<cfset birthday = "2009/06/27">
<cfoutput>
元の変数:#birthday#<br>
年だけを抽出します:#Left(birthday,4)#年<br>
月だけを抽出します:#Mid(birthday,6,2)#月<br>
日だけを抽出します:#Right(birthday,2)#日<br>
</cfoutput>
表示結果
元の変数: 2009/06/27
年だけを抽出します: 2009 年
月だけを抽出します: 06 月
日だけを抽出します: 27 日
どの言語でもあるおなじみのleft関数,mid関数,right関数です。
対象となる文字列と抜き出す文字数を指定します。Mid関数は、抜き出す位置(何文字目か)を指定します。
○Len
文字列の文字数を取得します。
例)
<cfset country = "japan">
<cfoutput>
文字列「japan」の文字数:#Len(country)#
</cfoutput>
表示結果
文字列「japan」の文字数:5
取得するのは、バイト数ではなく文字数になります。
○Trim/Rtrim/Ltrim
文字列の先頭や末尾、その両方のスペースと制御文字を削除します。
例)
<cfset company = " ハイミン ">
<!--- ↑「△ハイミン△」となっています。(△は半角スペース) --->
<cfoutput>
先頭と末尾のtrim:[#Trim(company)#]<br>
末尾のtrim:[#Rtrim(company)#]<br>
先頭のtrim:[#Ltrim(company)#]
</cfoutput>
表示結果
先頭と末尾のtrim:[ハイミン]
末尾のtrim:[△ハイミン]
先頭のtrim:[ハイミン△ ]
※△は実際には半角スペースが表示されます。
Trim関数は先頭と末尾、Rtrim関数は末尾、Ltrim関数は先頭の半角スペースを削除しています。
Trim/Rtrim/Ltrim関数では全角スペースは削除されないので注意しましょう。
○Replace/REReplace
文字列内の指定した文字列1を文字列2に置き換えます。
例)
<cfset tmpString="abababb">
<cfoutput>
#Replace(tmpString,'a','x')#<br>
#Replace(tmpString,'a','x','all')#<br>
#ReReplace(tmpString,'[a-z]','x','all')#
</cfoutput>
表示結果
xbababb
xbxbxbb
xxxxxxx
上記のReplace関数では、変数「tmpString」の文字列内の「a」を「x」に置き換えます。1つ目の例では先頭の「a」のみ「x」に置き換えています。2つ目の例のように第4パラメータでallを指定すると、文字列内にある一致した文字列すべてを置き換えます。
ReReplace関数では、正規表現を使用して置き換えを行います。
日付/時刻の操作を行います。
○DateFormat/TimeFormat
日付および時刻の書式を指定します。
例)
<cfset tmpNow=NOW()>
<cfoutput>
年月日フォーマット:#DateFormat(tmpNow,"yyyy/mm/dd")#<br>
年月日フォーマット:#DateFormat(tmpNow,"yyyy/m/d")#<br>
月名表示:#DateFormat(tmpNow,"mmmm")#<br>
曜日名表示:#DateFormat(tmpNow,"dddd")#<br>
時刻フォーマット:#TimeFormat(tmpNow,"hh:mm:ss")#<br>
時刻フォーマット:#TimeFormat(tmpNow,"hh時mm分ss秒")#
</cfoutput>
表示結果
年月日フォーマット:2009/06/25
年月日フォーマット:2009/6/25
月名表示:June
曜日名表示:Thursday
時刻フォーマット:11:48:41
時刻フォーマット:11時48分41秒
DateFormat/TimeFormat関数のそれぞれの第2パラメータで日付および時刻の書式を指定します。
○CreateDate/CreateTime
日付および時刻オブジェクトを作成します。
例)
<cfoutput>
#CreateDate('2009','06','20')#<br>
#DateFormat(CreateDate('2009','06','20'),'yyyy/mm/dd')#<br>
#CreateTime('10','34','12')#<br>
#TimeFormat(CreateTime('10','34','12'),'hh:mm:ss')#
</cfoutput>
表示結果
{ts '2009-06-20 00:00:00'}
2009/06/20
{ts '1899-12-30 10:34:12'}
10:34:12
パラメータにて、年月日および時分秒を個別に指定します。DateFormat関数と組み合わせる事によって、指定の書式となります。
年・月・日(時・分・秒)それぞれのテキストボックスがあり、それらに入力された3つの数値をCreateDate/CreateTime関数を使用して日付形式に変換する、といった使い方がでます。
○DateAdd
指定した単位で、日付を加算します。
例)
<cfset tmpNow=Now()>
<cfoutput>
基準日:#tmpNow#<br>
5年後:#DateAdd('yyyy',5,tmpNow)#<br>
10ヶ月後:#DateAdd('m',10,tmpNow)#<br>
5日後:#DateAdd('d',5,tmpNow)#<br>
15日前:#DateAdd('d',-15,tmpNow)#<br>
5時間後:#DateAdd('h',5,tmpNow)#
</cfoutput>
表示結果
基準日:{ts '2009-06-25 12:10:32'}
5年後:{ts '2014-06-25 12:10:32'}
10ヶ月後:{ts '2010-04-25 12:10:32'}
5日後:{ts '2009-06-30 12:10:32'}
15日前:{ts '2009-06-10 12:10:32'}
5時間後:{ts '2009-06-25 17:10:32'}
第1パラメータで加算する単位(年、月、日、時 等)を指定し、第2パラメータで加算する数値を指定します。減算する場合は、−(マイナス)値を指定します。
○DateDiff
指定した2つの日付の差を取得します。
例)
<cfset tmpDateTime1="2000/01/01">
<cfset tmpDateTime2=Now()>
<cfoutput>
2000年1月1日と2009年6月25日の差を表示<br>
年換算:#DateDiff('yyyy',tmpDateTime1,tmpDateTime2)#年<br>
月換算:#DateDiff('m',tmpDateTime1,tmpDateTime2)#ヶ月<br>
日換算:#DateDiff('d',tmpDateTime1,tmpDateTime2)#日<br>
時間換算:#DateDiff('h',tmpDateTime1,tmpDateTime2)#時間<br>
秒換算:#DateDiff('s',tmpDateTime1,tmpDateTime2)#秒
</cfoutput>
表示結果
2000年1月1日と2009年6月25日の差を表示
年換算:9年
月換算:113ヶ月
日換算:3463日
時間換算:83124時間
秒換算:299247449秒
tmpDateTime1とtmpDateTime2の差を求めます。差の単位を第1パラメータで指定できます。
○DateCompare
指定した2つの日付の比較を行います。
例)
<cfset tmpDateTime1=CreateDate('2009','06','19')>
<cfset tmpDateTime2=Now()>
<cfoutput>
tmpDateTime1:#tmpDateTime1#<br>
tmpDateTime2:#tmpDateTime2#<br>
比較結果:#DateCompare(tmpDateTime1,tmpDateTime2,'d')#
</cfoutput>
表示結果
tmpDateTime1:{ts '2009-06-19 00:00:00'}
tmpDateTime2:{ts '2009-06-25 12:21:30'}
比較結果:-1
tmpDateTime1とtmpDateTime2を比較し、tmpDateTime1の方が過去であれば「-1」、tmpDateTime1の方が未来であれば「1」、同じであれば「0」を返します。第2パラメータは、比較を行う精度を指定します。
○IsLeapYear
指定した年が閏年かを返します。
例)
<cfoutput>
今年は閏年ですか?:#IsLeapYear(Now())#
</cfoutput>
表示結果
今年は閏年ですか?:NO
閏年の場合「YES(true)」、閏年ではない場合「NO(false)」を返します。
※表示結果は2009年現在です。
配列関連の操作を行います。
○ArrayNew
配列を作成します。3次元までの配列を作成する事ができます。
例)
<cfset arrNumber = ArrayNew(1)>
<cfdump var="#arrNumber#" label="arrNumber">
パラメータで配列の次元の数を指定します。配列の宣言をしただけなので、<cfdump>タグで見ると「empty」になっています。
※<cfdump>タグで配列や構造体を表示すると、上記のように一覧表として表示されます。デバッグの際に便利です。
○ArrayIsEmpty
指定した配列が空かどうかを判断します。
例)
<cfset arrNumber = ArrayNew(1)>
<cfoutput>
配列は空ですか?#ArrayIsEmpty(arrNumber)#
</cfoutput>
表示結果
配列は空ですか?YES
配列を宣言しただけで値を入れていないので、結果は「YES(true)」となります。
○ArrayAppend
配列に値を追加します。
例)
<cfset arrNumber = ArrayNew(1)>
<cfloop index="i" from=1 to=5>
<cfset tmp = ArrayAppend(arrNumber,i * 2)>
</cfloop>
<cfdump var="#arrNumber#" label="arrNumber">
表示結果
第1パラメータで配列、第2パラメータで配列に追加する値を指定します。
○ArrayLen
配列の要素数を取得します。
例)
<cfset arrNumber = ArrayNew(1)>
<cfloop index="i" from=1 to=5>
<cfset tmp = ArrayAppend(arrNumber,i * 2)>
</cfloop>
<cfdump var="#(arrNumber)#" label="arrNumber"><br>
<cfoutput>
配列「arrNumber」の要素数:#ArrayLen(arrNumber)#
</cfoutput>
表示結果
配列「arrNumber」の要素数:5
<cfloop>タグで5回ループして値をセットしているので、配列「arrNumber」の要素数は5となります。
○ArrayToList
配列をリストに変換します。
例)
<cfset arrNumber = ArrayNew(1)>
<cfloop index="i" from=1 to=5>
<cfset tmp = ArrayAppend(arrNumber,i * 2)>
</cfloop>
<cfdump var="#arrNumber#" label="arrNumber"><br>
<cfoutput>
配列「arrNumber」をリストに変換:#ArrayToList(arrNumber)#
</cfoutput>
表示結果
配列「arrNumber」をリストに変換:2,4,6,8,10
配列をカンマ区切りのリストに変換します。
○ListToArray
リストを配列に変換します。
例)
<cfset lstNumber="3,4,,23,26,11">
<cfset arrNumber = ArrayNew(1)>
<cfdump var="#ListToArray(lstNumber,',','true')#" label="arrNumber">
表示結果
第2パラメータで区切り文字、第3パラメータで空の値の要素を作成するかを指定します。3番目の要素が「empty」になっているのがわかります。
○ArrayDeleteAt
配列の指定した要素を削除します。
例)
<cfset arrNumber = ArrayNew(1)>
<cfloop index="i" from=1 to=5>
<cfset tmp = ArrayAppend(arrNumber,i * 2)>
</cfloop>
<cfdump var="#arrNumber#" label="arrNumber"><br>
<cfset tmp = ArrayDeleteAt(arrNumber,3)>
<cfdump var="#arrNumber#" label="arrNumber">
表示結果
第1パラメータで配列、第2パラメータで削除する要素番号を指定します。要素の削除前と削除後では、3番目の要素が削除されているのがわかると思います。
○ArrayInsertAt
配列の指定した位置に要素を追加します。
例)
<cfset arrNumber = ArrayNew(1)>
<cfloop index="i" from=1 to=5>
<cfset tmp = ArrayAppend(arrNumber,i * 2)>
</cfloop>
<cfdump var="#arrNumber#" label="arrNumber"><br>
<cfset tmp = ArrayInsertAt(arrNumber,3,800)>
<cfdump var="#arrNumber#" label="arrNumber">
表示結果
第1パラメータで配列、第2パラメータで追加する要素番号、第3パラメータで追加する値を指定します。配列要素の3番目の位置に値「800」を追加しています。
リスト関連の操作を行います。
○ListFind
リスト要素から指定した値が検出される最初のインデックスを調べます。
例)
<cfset lstNumber="3,4,6,23,26,11">
<cfoutput>
「6」が格納されているインデックス番号:#ListFind(lstNumber,6)#
</cfoutput>
表示結果
「6」が格納されているインデックス番号:3
上記リストで値「6」が最初に検出されるのが、3番目のインデックスなので、戻り値は「3」となります。
○ListGetAt
リストから指定の位置の値を取得します。
例)
<cfset lstNumber="3,4,6,23,26,11">
<cfoutput>
4番目のインデックスの値:#ListGetAt(lstNumber,4)#
</cfoutput>
表示結果
4番目のインデックスの値:23
上記リストで4番目の位置にある値「23」が戻り値となります。
○ListLen
リストの要素数を取得します。
例)
<cfset lstNumber="3,4,6,23,26,11">
<cfoutput>
リスト「lstNumber」の要素数:#ListLen(lstNumber)#
</cfoutput>
表示結果
リスト「lstNumber」の要素数:6
上記リストでは6個の要素があるので、戻り値は「6」となります。
連載第2回・前編ではColdFusionの文字列関数、日付/時刻関連関数、Array関連関数、List関連関数について紹介しました。後編では、構造体関連関数、セキュリティ関連関数、その他関数、ユーザー定義関数について説明いたします。掲載は7月中旬頃の予定です。
後編も是非ご覧頂ください。