2012-07-19 227 views
0

我想添加一項功能,允許wvb應用程序的用戶使用CSV文件批量上傳數據 - 除非數據在實際字段本身包含逗號,否則所有工作都很好。CSV文件中的逗號逗號

有很多關於這個的帖子,我已經閱讀了很多關於解決這個問題的方法,主要是用雙引號括住逗號,但我無法弄清楚如何爲我的代碼執行此操作。

最終我不能依賴用戶在輸入時爲我做這件事,所以我需要做它作爲上傳過程的一部分之前,它擊中數據庫 - 我試圖使用選項卡作爲備用分隔符,但Excel似乎是非常在處理標籤分離方面不一致,所以我排除了這一點。

(sanitiseData是我用整個現場清理所有的用戶輸入數據的功能)

 $handle = fopen($file_path, 'r'); 
     $row_count=0; 

     while (($data = fgetcsv($handle, 0, ',')) !== FALSE) { 
      if ($row_count==0) { 
       $row_count++; 
       } else { 
        $row_count++; 
        $works_id = sanitiseData($data[0]); 
        $title = sanitiseData($data[1]); 
        $first_name = sanitiseData($data[2]); 

        //Use data to insert into db 
        $sql = mysql_query("INSERT INTO csv_employee_personal (id,works_id,title,first_name) VALUES ('','$works_id','$title','$first_name')"); 
       } 
     } 

     //delete csv file 
     unlink($file_path); 
+0

你是如何創建的CSV文件? – 2012-07-19 20:32:09

+1

使用['MySQLi']( http://php.net/manual/en/book.mysqli.php)和['mysqli_query'](http://php.net/manual/en/mysqli.query.php)等。** NOT ** 'mysql _...'。 – 2012-07-19 20:32:43

+5

如果*逗號分隔值*包含未轉義的逗號,則數據無效。任何分析它的嘗試都是一個幸運的猜測。要求你的用戶提交**有效的**數據。 – deceze 2012-07-19 20:34:05

回答

1

我假定這是你的數據是什麼樣子 「數據」,「數據2」,「DATA3 ,還有一些「,」data4「

我的正則表達式非常糟糕,但我認爲這將是您的最佳解決方案。

同時,您可以遞歸地將每個字符排列在一行並跟蹤逗號和字段分隔符,並且當您意識到您正在查看未被關閉的逗號時,則可以將其跳過。

如果我給U中的示例數據的數據相匹配,給我幾個分鐘,而我寫一個函數爲你逃避逗號

+0

簡單地說,數據看起來像123,先生,鮑勃,當它被給予應用程序 - 問題是如果上述出現123,Mr,B,ob – bhttoan 2012-07-19 20:49:43

+0

哦,對不起,先生,不知道如何區分鮑勃的逗號名稱和分隔字段的真正逗號。 – Markedagain 2012-07-19 20:53:15

+0

其可能的不好的建議,但額外的逗號總是在名稱中?如果第一列始終是id,第二列是2-3字母標題abriviation,那麼你可能會做一個字符串替換過去那個點 – Markedagain 2012-07-19 20:55:26