7

csvファイルに含まれる列の数を特定しようとしています。

これが私のスクリプトです。最初の列のみを使用していますが、少しブラインドで実行しています。列数を制限する変数を配置したいと思います。(間違えて列を追加したり、列を見逃したりする可能性があるため)

<?php
$allowedColNum=5;
$batchcount=0;
$file = fopen($file_name, "r"); 
while ($line = fgetcsv($file)){
 /* I want to stop the loop if the $allowedColNum is not correct */                 
  $col = $line[0]; 
  echo $batchcount++.". ".$col."\n";
}

fclose($file);
?>

それは私が得ていないそれらの簡単で簡単なものの1つだと確信しています。

4

3 に答える 3

16

私が理解しているのであれば、CSVファイルから1行を表す配列が返されたcount($line)ため、必要なのは単にです。fgetcsv()したがって、配列count()はソース列の数です。

while ($line = fgetcsv($file)){

  // count($line) is the number of columns
  $numcols = count($line);

  // Bail out of the loop if columns are incorrect
  if ($numcols != $allowedColNum) {
     break;
  }
  $col = $line[0]; 
  echo $batchcount++.". ".$col."\n";
}
于 2011-10-06T17:38:58.250 に答える
0

テストされていませんが、動作するはずです!

$allowedColNum=5;
$batchcount=0;
$file = fopen($file_name, "r"); 
$totCols=0;
while ($line = fgetcsv($file))
if(count($line) > $totCols) $totCols = count($line);
fseek($file, 0);
while ($line = fgetcsv($file))
{
  //....
}
fclose($file);

編集:テスト済み、配列に値を保存する代わりにfseek(0)を実行:はるかに高速になります

于 2011-10-06T17:45:51.333 に答える
0

Michael Berkowskiの回答は私にとっては問題なく機能しますが、私の場合は、fgetcsv()関数呼び出しでcsv区切り文字も指定する必要がありました。デフォルトではカンマ"、"ですが、セミコロン";"に変更します。このような:

while($ line = fgetcsv($ file、0、';')){

于 2015-08-12T16:04:04.907 に答える