问题描述
我已经看到很多使用列的顺序/位置将 csv 内容插入数据库的示例:
<cffile action="read" file="C:\foo\bar\test.csv" variable="csvfile">
<cfloop index="index" list="#csvfile#" delimiters="#chr(10)##chr(13)#">
<cfquery name="importcsv" datasource="#systemDSN#">
INSERT INTO csvdemo (test1,test2,test3,test4)
VALUES
('#listgetAt('#index#',1,',')#','#listgetAt('#index#',2,3,4)#'
)
</cfquery>
</cfloop>
我似乎找不到按 csv 列名插入的示例。任何人都可以为我指明正确的方向,或者提供一个示例来说明如何做到这一点或您是如何做到的?
编辑:如果我的 csv 有以下列,而我只想要姓氏、用户名和 LastAccessed,并且列的顺序可以在 csv 上变化:
UserId UserName OrgDefinedId FirstName MiddleName LastName IsActive Organization ExternalEmail SignupDate FirstLoginDate Version OrgRoleId LastAccessed
解决方法
试试这个:
<!--- SET THE RECORD COUNT HERE ----->
<cfset end_of_line = Chr(10)>
<!--- PLACE CONTENT OF YOUR CSV FILE INTO A SINGLE VARIABLE ----->
<cffile action="READ"
file="C:\foo\bar\test.csv" variable="DataFile">
<!----- CLEAN AND TRIM DATA FILE ----->
<cfset clean_data_file = #trim(DataFile)#>
<!--- PUT THE LIST INTO AN ARRAY ----->
<cfset data_line_array = ListToArray(clean_data_file,end_of_line)>
<!--- COUNT THE NUMBER OF ARRAYS ----->
<cfset arraycount = #ArrayLen(data_line_array)#>
<!--- CREATE A 2-DIMENSIONAL ARRAY WHICH WILL HOLD ALL THE VALUES OF THE CSV ----->
<cfset recvalue = ArrayNew(2)>
<cfset recvaluectr = 1>
<cfloop index ="x" from="1" to="#arraycount#">
<!--- DEFINE THE DELIMITER USED WHICH IS COMMA OR TAB ----->
<cfset data_element_array = ListToArray(Data_Line_Array[x],',')>
<cfset elementarraycount = #ArrayLen(Data_Element_Array)#>
<!--- SET THE FIELDDATA (COLUMN) TO AN ELEMENT IN THE ARRAY ----->
<!--- FIRST COLUMN ----->
<cfset tmp_element_1 = '#data_element_array[1]#'>
<cfset element_1 = '#trim(Replace(tmp_element_1,'"',' ','All'))#'>
<!--- SECOND COLUMN and so on... ----->
<cfset tmp_element_2 = '#data_element_array[2]#'>
<cfset element_2 = '#trim(Replace(tmp_element_2,'All'))#'>
</cfloop>
<!---- THEN PUT EVERYTHING IN THE TABLE ----->
<cfloop index='i' from='1' to='#arraycount#'>
<cfquery name="WriteToTable" datasource="MyDatabase" dbtype="odbc">
insert into MyTable (
column1,column2
)
values (
'#trim(recvalue[i][1])#','#trim(recvalue[i][2])#'
)
</cfquery>
</cfloop>
让我知道这是否有效。谢谢。 :)