2011-08-16 69 views
4

我一直在努力將csv文件導入到mysql數據庫中。問題是我的客戶端已經有一些格式不正確的文件。行結束於43,但文件下降到65078!如何使用fgetcsv省略空白行

導入時,腳本需要永久使用。我能做些什麼來確保只有0到44行被導入?這是我使用的代碼。

<table> 
<?php 
//fgetcsv($handle, 1024, delimiter) 
$file = fopen("prices.csv", "r"); 
$row = 0; 

    while($csv_line = fgetcsv($file,1024)) { 

     if($row == 4){ 
     echo "How many headers do we have: ".count($csv_line)."<tr>"; 

     foreach($csv_line as $header){ 

      if($header !== NULL){ 
      print "<td>$header</td>"; 
      } 
     } 
     echo "</tr>"; 
     } 

     if($row > 6) { 

     echo '<tr>'; 

     for ($i = 0, $j = count($csv_line); $i < $j; $i++) { 

      echo '<td>'.$csv_line[$i].'</td>'; 

     } 

     echo "</tr>\n"; 

     } else { 

     $row++; 

     } 

    } 
?> 

</table> 

回答

4

;如果填寫的行數不固定,你可以用類似的方法與它會退出:

if (empty($line)) { break; } 

您的評論給我一個更好的解決方案的想法:

這裏http://php.net/manual/en/function.fgetcsv.php出現此「在CSV文件中一個空行會返回一個ARRA Ÿ包括一個空場」,所以也許這會有所幫助:直到找到一個空行

while(($csv_line = fgetcsv($file,1024)) && $csv_line[0]) {

將只讀取。

+0

我想我可以做到這一點,但文件仍然不會被解析,這仍然會消耗太多時間?因爲爲了知道該行是空的,它仍然會一直走到文件的末尾... – Chiko

+1

您的評論給了我一個更好的解決方案的想法: 這裏[鏈接](http:// php。 net/manual/en/function.fgetcsv.php)出現這個「CSV文件中的空白行將作爲包含單個空字段的數組返回」,所以這可能有助於: while(($ csv_line = fgetcsv( $ file,1024))&& $ csv_line [0]){' 只讀,直到找到一個空行(我會更新回覆) – leticia

+0

非常感謝。有用!!! – Chiko

0

在循環的底部添加if ($row >= 44) { break; }所以一旦你達到一行44

+0

感謝您的幫助。我改變了它,但它不會停止執行!該腳本返回的頁面底部填充了大量空白... – Chiko

+0

不要將'$ row ++'放入其中一個if()子句中。它只會在特定子句匹配時遞增。它應該在循環的頂層,所以無論在循環中發生什麼,它都會增加。 –