列のマッピングを可能にするために CSV アップローダをカスタマイズしています。それを配列に解析する関数があります。それをループして、アップロードされたファイルの列名を持つ選択ボックスを生成し、DB の対応するテーブルの既存の列名にマップします。
選択ドロップダウンに列名を入力することはできますが、アップロードされたファイル内の列の量をループして選択ドロップダウンの合計量を制限する方法がわかりません。
解析後の関数:
<!--- Get Value from Array based on Column Name --->
<cffunction name="ValByColName" access="public" returntype="string" output="false">
<cfargument name="ColName"type="string" required="true" default=""/>
<cfargument name="DataArray" type="array" required="true" default=""/>
<cfset findValue = keyArray.indexOf(#ColName#) + 1>
<cfreturn(#DataArray[findValue]#) />
</cffunction>
ループ:
<!--- Set Uploaded file to Array --->
<cfset arrCSV = CSVToArray(CSVFilePath = #form.UploadedFile#,Delimiter = ",",Qualifier = """") />
<!--- Create Key array from column names --->
<cfset keyArray = ArrayNew(1)>
<cfloop from="1" to="#DON'T KNOW WHAT TO PUT HERE" index="t">
<!--- Variable Headers --->
<cfif Len(form.UploadedFile) GTE 5>
<cftry>
<select name="HeaderID" class="search" id="Header">
<option selected value="">--- Headers Uploaded ---</option>
<cfoutput>
<cfloop from="1" to="1" index="i">
<cfloop from="1" to="#ArrayLen(arrCSV[i])#" index="j">
<option name="HeaderID" value="#j#">#arrCSV[i][j]#</option>
</cfloop>
</cfloop>
</cfoutput>
</select> =
</cftry>
</cfif>
<cfquery name="clientsCols" datasource="#request.dsn#">
select Column_name
from Information_schema.columns
where Table_name like 'Clients'
</cfquery>
<!--- Constants--->
<cfif Len(form.UploadedFile) GTE 5>
<cftry>
<select name="ColumnID" class="search" id="Column">
<option selected value="">--- Headers Clients ---</option>
<cfoutput>
<cfloop query="clientsCols">
<option name="ColumnID" value="#Column_name#">#Column_name#</option>
</cfloop>
</cfoutput>
</select><br /><br />
</cftry>
</cfif>
</cfloop>