2010-12-10 74 views
1

編輯:是否有替代fgetcsv?用戶fgetcsv帶有和不帶引號的條目

下面的代碼處理,其中在由報價套管和分隔每一項由逗號ex: "Name","Last" CSV文件...我遇到的問題是有時CSV文件沒有圍繞每個條目的報價,只是用逗號分隔它ex: Name,Last。我如何處理這兩種類型?

$uploadcsv = "/temp/files/Load15.csv"; 
     $handle = fopen($uploadcsv, 'r'); 
     $column_headers = array(); 
$row_count = 0; 
while (($data = fgetcsv($handle, 100000, ",")) !== FALSE) { 
    if ($row_count==0){ 
    $column_headers = $data; 
    } else { 
    print_r($data); 
    } 
    ++$row_count; 
} 

這個CSV工作:

"Name","Last" 
"Mike","Aidens" 
"Mike1","Aidens1" 

這個CSV不起作用:

Name,Last 
Mike,Aidens 
Mike1,Aidens1 

編輯:奇怪的錯誤......我試圖從一個小片段沒有引用的CSV文件,它的工作。奇怪的是,我嘗試了一大塊,然後整個CSV內容(這都是粘貼到一個新的test.csv文件),它的工作。兩個文件都是相同的確切大小17,151kb,但原始的CSV文件不會處理。最後沒有尾隨空格或行。

+1

你是說它不處理這兩種權利嗎?會發生什麼呢? fgetcsv爲我處理了未加引號的值。 – 2010-12-10 12:06:39

+0

@dan什麼也沒有發生,沒有錯誤,也沒有輸出。它只適用於「名稱」,不會與名稱一起使用。我需要它的工作與「名稱」,「最後」和名稱,最後 – acctman 2010-12-10 12:24:59

+0

提供您的CSV文件,因爲fgetcsv不是過錯 – 2010-12-10 12:31:02

回答

0

就我所知,fgetcsv應該可以在數據周圍引用或不引用數據。

+0

是的,直到它不處理非拉丁字母 – 2013-12-11 23:58:26

0

除非CSV文件格式不正確,否則這將「正常工作」。

換句話說,您無需擔心每個字段是否有引號,fgetcsv會爲您處理此問題。

+0

糾正它與「姓名」,「最後」像在我的代碼上面,但我需要名稱,最後被檢測和處理。這可能嗎? – acctman 2010-12-10 12:26:44

+0

你確定你的CSV文件沒有格式錯誤(有一個缺失或額外的逗號或問號) - fgetcsv應該正確處理這個問題。 – 2010-12-10 12:28:23

+0

你可能是正確的...測試一個小部分,看看現在是否能正常工作.. – acctman 2010-12-10 12:53:09

1

將第4個參數設置爲空字符串,它設置機箱,默認爲"

fgetcsv($handle, 100000, ",", ''); 
+0

我認爲這會工作,但不是..該行是否自動包含帶引號的字段? – 2013-12-11 23:52:36

1

使用此行代碼的PHP getcsv函數調用之前

ini_set('auto_detect_line_endings',TRUE); 
+1

這救了我的命! – Brainfeeder 2015-10-30 12:50:45