2017-10-13 183 views
0

我試圖合併多個CSV文件,但無法做到這一點。 請看看我的代碼我不知道我的代碼有什麼問題。 csvfiles是一個包含多個相同格式文件的目錄。合併多個CSV文件

Download Sample CSV Files

我的代碼

$csvdir = "./csvfiles/"; 
$result = fopen('./csvfiles/merge.csv', 'w'); 
$test=""; 
if (is_dir($csvdir)) { 
    if ($handle = opendir($csvdir)){ 
     while (($file = readdir($handle)) !== false) { 
      if (substr($file, -4) === ".csv") { 
       $csvcontent = file_get_contents($file); 
       fwrite($result, $csvcontent); 
      } 
     } 
     closedir($handle); 
    } 
} 
fclose($result); 
+0

哪些錯誤你什麼時候執行的代碼怎麼面對? – shahsani

+0

沒有錯誤,邏輯上它應該合併文件,但用空白數據創建新的merge.csv文件 –

+0

這意味着你的任何'if(...)'條件都給出'false'結果。 – shahsani

回答

1

一些觀察:

  • 在某些時候opendir($csvdir)還將包括您merge.csv文件。你想避免這種情況。保持它獨立。

  • 將文件操作保持在最低限度。對於您的循環中的每個.csv文件,您都可以寫入merge.csv。相反,收集數據以寫入您的循環並只寫一次。

  • 您收到的錯誤文件內容爲file_get_contents($file);$file將只包含文件名,而不是完整的路徑。

  • $test從不使用。

這裏的工作代碼:

<?php 

$csvdir = "./csvfiles/"; 
$csvcontent = ''; 
if (is_dir($csvdir)) { 
    if ($handle = opendir($csvdir)) { 
     while (($file = readdir($handle)) !== false) { 
      if (substr($file, -4) === ".csv") { 
       $csvcontent .= file_get_contents($csvdir . $file); 
      } 
     } 
     closedir($handle); 
    } 
} 

$result = fopen('./merge.csv', 'w'); 
fwrite($result, $csvcontent); 
fclose($result);