2016-08-29 2 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