PHPを使用してCSVファイルにある行の総数を取得するにはどうすればよいですか?私はこの方法を使用していますが、適切に機能させることができます。
if (($fp = fopen("test.csv", "r")) !== FALSE) {
while (($record = fgetcsv($fp)) !== FALSE) {
$row++;
}
echo $row;
}
file()
を使用してファイル全体を配列に読み込み、新しい行を自動的に解析するなどの別のオプションを次に示します。
$fp = file('test.csv');
echo count($fp);
また、PHP5以降では、FILE_SKIP_EMPTY_LINES
...必要に応じて、空の行をスキップします。
$fp = file('test.csv', FILE_SKIP_EMPTY_LINES);
SplFileObject
を使用して新しいファイル参照を作成します。
$file = new SplFileObject('test.csv', 'r');
seek
を最高のInt PHPで処理できるようにしよう:
$file->seek(PHP_INT_MAX);
次に、実際にファイル内で最高の行を探します。最後の行があり、最後の行+ 1は合計行に等しくなります。
echo $file->key() + 1;
トリッキーですが、これにより、ファイルの内容をメモリにロードすることを回避できます。これは、非常に大きなファイルを処理する場合に実行する非常にクールなことです。
試して
$c =0;
$fp = fopen("test.csv","r");
if($fp){
while(!feof($fp)){
$content = fgets($fp);
if($content) $c++;
}
}
fclose($fp);
echo $c;
これはかなり古いことを知っていますが、実際には同じ質問にぶつかりました。解決策として、Linux固有のロジックを使用すると仮定します。
$rows = Shell_exec('$(/bin/which cat) file.csv | $(/bin/which tr) "\r" "\n" | $(which wc) -l');
注:これはLinuxでのみ機能します。ファイルに複数行セルがないことを100%確信している場合にのみ使用してください
CSV行は改行で区切られます。したがって、行を改行で分割すると、カウント可能な行の配列が得られます。
if (($fp = fopen("test.csv", "r")) !== FALSE) {
$rows = explode("\n", $fp);
$length = count($rows);
echo $length;
}
$filename=$_FILES['sel_file']['tmp_name'];
$file=fopen($filename,"r");
$RowCount=0;
while ((fgetcsv($file)) !== FALSE)
{
$RowCount++;
}
echo $RowCount;
fclose($file);
私はこれが古い投稿であることを知っていますが、この問題をグーグルで調べており、元のコードの唯一の問題はwhileループの外側で$row
を定義する必要がある、このような:
if (($fp = fopen("test.csv", "r")) !== FALSE) {
$row = 1;
while (($record = fgetcsv($fp)) !== FALSE) {
$row++;
}
念のために:) echo $ row; }