我正在自定义CSV上传器,以允许进行列映射。我有一个将其解析为数组的函数,然后遍历它以生成带有上载文件列名的选择框,以映射到数据库中相应表中的现有列名。

我可以使用列名填充选择下拉列表,但是我不知道如何循环浏览上载文件中的列数以限制选择下拉列表的总数。

解析后的功能:

<!--- 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>

最佳答案

如果将其与上面的原始版本进行比较,您会发现使用cfloop from="1" to="#ArrayLen(arrCSV[1])#" index="t"可以完全满足我的需求(解决方案的第5行)。上传后,选择框对的数量就是上传文件中列标题的数量。

感谢大家的回应。

<!--- 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="#ArrayLen(arrCSV[1])#" index="t">
    <!--- Variable Headers --->
    <cfif Len(form.UploadedFile) GTE 5>
        <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#t#" value="#j#">#arrCSV[i][j]#</option>
                </cfloop>
            </cfloop>
            </cfoutput>
        </select> =
    </cfif>
    <!---Column Constants--->
    <select name="ColumnID" class="search" id="Column">
        <option selected value="">--- Headers Clients ---</option>
        <cfoutput>
        <cfloop query="clientsCols">
            <option name="ColumnID#T#" value="#Column_name#">#Column_name#</option>
        </cfloop>
        </cfoutput>
    </select><br /><br />
</cfloop>

关于loops - 按CSV上载的列数循环浏览Coldfusion,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16695813/

10-11 03:06