2009-07-12 14:08:03

Listデータをカラム名で取得

テーマ:ColdFusionメモ
csvデータは、1番目は○○という意味のデータと、意味付けされています。


例:データを変換し、元データ、変換データ、変換データの要素をカラム名で表示

<cfset fList = "f1,f2,f3,f4,f5">
<cfset obj = createObject( "component", "csv2cflist").init(",","NULL", fList)>
<cfset data = ",2,3,,">
<cfset obj.conv(data)>
<cfoutput>
moto = #obj.getMotoData()#conv = #obj.getConvData()#<br>
<cfloop index="idx" list="#fList#">
#idx#=#obj.ListGetAtF(idx)#<br>
</cfloop>
</cfoutput>


前回作ったコンポーネントは要素の位置を指定して取得しました。
上記を実現するためのコンポーネントのソースは以下のとおりです。

【csv2cflist.cfc】
01: <cfcomponent>
02:     <!--- 区切り --->
03:     <cfset variables.sep = "">
04: 
05:     <!--- ヌルの時の変換文字列 --->
06:     <cfset variables.chgStr = "">
07: 
08:     <!--- 元データ --->
09:     <cfset variables.motoData = "">
10: 
11:     <!--- 変換後データ --->
12:     <cfset variables.convData = "">
13: 
14:     <!--- データの項目名のリスト --->
15:     <cfset variables.fList = "">
16: 
17:     <!--- init --->
18:     <cffunction name="init"
19:                 access="public"
20:                 type="csv2cflist"
21:                 output="no">
22: 
23:         <cfargument name="sep"
24:                     type="string"
25:                     required="yes">
26: 
27:         <cfargument name="chgStr"
28:                     type="string"
29:                     required="yes">
30: 
31:         <cfargument name="fList"
32:                     type="string"
33:                     required="yes">
34: 
35:         <cfset variables.sep    = arguments.sep>
36:         <cfset variables.chgStr = arguments.chgStr>
37:         <cfset variables.fList  = arguments.fList>
38: 
39:         <cfreturn this>
40:     </cffunction>
41: 
42:     <!--- 変換 --->
43:     <cffunction name="conv"
44:                 access="public"
45:                 type="void"
46:                 output="no">
47: 
48:         <cfargument name="data"
49:                     type="string"
50:                     required="yes">
51: 
52:         <cfset variables.motoData = arguments.data>
53:         <cfset variables.convData = arguments.data>
54: 
55:         <cfif left(variables.convData,1) eq variables.sep>
56:             <cfset variables.convData =
57:                         variables.chgStr & variables.convData>
58:         </cfif>
59:         <cfloop condition = 
60:                 "Find('#variables.sep##variables.sep#',
61:                         variables.convData) neq 0">
62: 
63:             <cfset variables.convData = 
64:                         Replace(
65:                             variables.convData,
66:                             "#variables.sep##variables.sep#",
67:                             "#variables.sep##variables.chgStr##variables.sep#",
68:                             "ALL")>
69:         </cfloop>
70: 
71:         <cfif right(variables.convData,1) eq variables.sep>
72:             <cfset variables.convData =
73:                         variables.convData &
74:                         variables.chgStr>
75:         </cfif>
76:     </cffunction>
77: 
78:     <!--- 指定カラムのデータ取得 --->
79:     <cffunction name="ListGetAtEx"
80:                 access="public"
81:                 type="string"
82:                 output="no">
83: 
84:         <cfargument name="no"
85:                     type="numeric"
86:                     required="yes">
87: 
88:         <cfset var tmp = "">
89:         <cfset tmp = ListGetAt(
90:                         variables.convData,
91:                         arguments.no,
92:                         variables.sep)>
93: 
94:         <cfif tmp eq variables.chgStr>
95:             <cfreturn "">
96:         </cfif>
97:         <cfreturn tmp>
98:     </cffunction>
99: 
00:     <!--- 指定カラムのデータ取得 --->
01:     <cffunction name="ListGetAtF"
02:                 access="public"
03:                 type="string"
04:                 output="no">
05: 
06:         <cfargument name="fld"
07:                     type="string"
08:                     required="yes">
09: 
10:         <cfset var tmp =
11:                     ListFindNoCase(
12:                         variables.fList,
13:                         arguments.fld)>
14:         <cfif tmp eq 0>
15:             <cfreturn "">
16:         </cfif>
17:         <cfreturn ListGetAtEx(tmp)>
18:     </cffunction>
19: 
20:     <!--- 元データ --->
21:     <cffunction name="getMotoData"
22:                 access="public"
23:                 type="string"
24:                 output="no">
25: 
26:         <cfreturn variables.motoData>
27:     </cffunction>
28: 
29:     <!--- 変換データ --->
30:     <cffunction name="getConvData"
31:                 access="public"
32:                 type="string"
33:                 output="no">
34: 
35:         <cfreturn variables.convData>
36:     </cffunction>
37: 
38: </cfcomponent>
AD
いいね!した人  |  コメント(0)  |  リブログ(0)

うたらぼさんの読者になろう

ブログの更新情報が受け取れて、アクセスが簡単になります

コメント

[コメントをする]

コメント投稿

AD

ブログをはじめる

たくさんの芸能人・有名人が
書いているAmebaブログを
無料で簡単にはじめることができます。

公式トップブロガーへ応募

多くの方にご紹介したいブログを
執筆する方を「公式トップブロガー」
として認定しております。

芸能人・有名人ブログを開設

Amebaブログでは、芸能人・有名人ブログを
ご希望される著名人の方/事務所様を
随時募集しております。