2

次のようなCSVファイルがあります(約500行あります)

ID,Title,LastName,HouseNo,Street,City,Postcode,Telephone
1209109,Miss,Test,1635,Test Road,Test, AB12 2EF,
1209833,Mrs,Test,3,Test Close,Test,BB12 2EF,
1205839,Miss,Test,1,Test Road,Test,AA12 2EX,

次に、次のPHPを使用しています。

$handle = fopen($csvFile, "r");
$imports = array();

$row = 1;
echo "<table>";
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) 
{
       // skip headers
       if($row == 1){ $row++; continue; }
       echo "<tr>";
       echo "<td>$data[0]</td>";
       echo "<td>$data[1]</td>";
       echo "<tr>";

} 
echo "</table>";
fclose($handle);`

私は次のようなものを期待しています:

1209109   Miss
1209833   Mrs

しかし、何らかの理由で、ファイル内のランダムなポイントから開始し、一部のデータを間違って出力しているよう<td>です。

問題は各行の末尾のコンマでしょうか?

ありがとう

4

2 に答える 2

1

あなたが抱えている問題は、行末 ( EOL) の不一致だと思います。基本的に、fgetcsv()関数は改行文字に基づいてファイルを分割しますが、ファイルを使用している文字とは異なる文字 (たとえば\n\rvs \rvs \n) を想定しています。その結果、関数は最初の1000文字を (関数呼び出しに従って) 取得し、それを最初の行として扱い、次の 1000 文字を取得するということになります。これにより、出力が多少ランダムになります。

次のようなことを試すことができるかもしれません:

ini_set('auto_detect_line_endings', true);

ファイルを取得する前に。または、CSV を手動で変更して EOL 文字を標準化するか、EOL 文字を変更できるファイル変換でスプレッドシートを開くことができます (つまり、Unix と Windows の比較)

于 2013-06-03T22:31:27.073 に答える
0

提供されたデータでエラーを再現できませんでした (末尾のコンマが残っているか削除されていても) が、提供されたコードでテーブルの行を閉じていないことに気付きました.

これが表示エラーの原因になるとは思いませんが、コードを次のように変更することをお勧めします。

$row = 1;
echo "<table>";
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) 
{
   // skip headers
   if($row == 1) {
     $row++; 
     continue; 
   }
   echo "<tr>";
   echo "<td>$data[0]</td>";
   echo "<td>$data[1]</td>";
   echo "</tr>\n";

} 
echo "</table>";
fclose($handle);
于 2013-06-03T22:43:45.440 に答える