2016-08-29 10 views
1

CSVをとり、そこからデータを解析してデータベースに書き込む新しい関数を作成したいと思います。 は、これまでのところ、私はこれを取得するために管理:coldfusionでCSVを解析する

<cfhttp method="get" url="C:\ColdFusion11\path\test.csv" name="csvData"> 
<cfoutput>#isQuery(csvData)#</cfoutput> 

<cfloop query="csvdata" > 
    <p> 
<cfloop list="#csvdata.columnlist#" index="i"> 
    <cfoutput> 
      #csvdata['#i#'][currentRow]# - 
    </cfoutput>  
</cfloop> 
</p> 
</cfloop> 

をそして、私はこのエラーを取得する: 変数CSVDATAは
未定義である私のVARは(cfhttpの中で定義されているので、私は、このエラーが出るんなぜ私にはわかりませんそれとも私が何か間違ったことをした)

+0

cfspreadsheet' '上に読んでください。 https://helpx.adobe.com/coldfusion/cfml-reference/coldfusion-tags/tags-rs/cfspreadsheet.html –

+0

* ... url = "C:\ ColdFusion11 \ path \ test.csv" *そうではありません有効なURLです。タグ名が意味するように、 'cfhttp'はHTTP要求をするために使われ、ローカルドライブのファイルは読み込まれません。 – Leigh

+0

実際、cfhttpを使用してサーバー上のファイルを読むことは完全に有効です。例を見るには、http://help.adobe.com/en_US/ColdFusion/9.0/CFMLRef/WSc3ff6d0ea77859461172e0811cbec22c24-7ffc.htmlにアクセスし、「区切られたテキストファイルからのクエリの構築」で始まるセクションを探してください。 。あなたが指摘したように、URLの構文は異なります。 –

答えて

1

このコードは、私の仕事:?

<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, ',')#', 
        '#listgetAt('#index#',3, ',')#', 
        '#listgetAt('#index#',4)#' 
       ) 
    </cfquery> 
</cfloop> 

<cfquery name="rscsvdemo" datasource="#systemDSN#"> 
     SELECT * FROM csvdemo 
</cfquery> 
<cfdump var="#rscsvdemo#"> 
+1

ほとんどのデータベースでは、CSVファイルをより効率的にインポートするためのツールが提供されています。つまり、BULK INSERT、LOAD DATA ..代わりにdbツールを使用するのはなぜですか? BTWでは、常にcfqueryparamを使用します(特にループ時)。 – Leigh

+0

なぜcfqueryparamを使用する方が良いですか? – T2Admin

+0

*なぜcfqueryparamを使用する方が良いですか? – T2Admin