2011-08-16 42 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 ($row >= 44) { break; }を追加します。

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

コメントは私のよりよい解決策のためのアイデアを与える:

ここhttp://php.net/manual/en/function.fgetcsv.phpは、CSVファイル内で、この「空白行がARRAとして返されます表示されますYを含む単一のヌルフィールドは」ので、多分これは役立ちます:空の行を見つけるまで

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

のみを読み込みます。

+0

私はそれを行うことができると思うが、ファイルはまだ解析されず、それはまだあまりにも多くの時間を消費するだろうか?行が空であることをPHPが知るためには、ファイルの終わりまでまだ行っていたでしょう... – Chiko

+1

あなたのコメントは私により良い解決策を提案します: ここで[リンク](http:// php。 CSVファイル内の空白行は1つのヌルフィールドを含む配列として返されるので、おそらくこれが役に立ちます: 'while(($ csv_line = fgetcsv(net/manual/en/function.fgetcsv.php) $$$))&& $ csv_line [0]){' 空行を見つけるまで読み取り専用です(私は返信を更新します) – leticia

+0

ありがとうございます。できます!!! – Chiko

0

それが満たされた行の数が固定されていない場合は、行44

+0

ありがとうございました。私はそれを変更しましたが、実行を停止しません!スクリプトは、一番下の空白がたくさんあるページを返しています... – Chiko

+0

'$ row ++ 'をif()節の中に入れないでください。特定の句が一致する場合にのみ増加します。それはループの最上位レベルにあるべきなので、ループの内部で何が起こっているかにかかわらず増分します。 –

関連する問題