Как получить общее количество строк в CSV файле с помощью PHP?
Как получить общее количество строк в файле CSV с помощью PHP? Я использую этот метод, но могу заставить его работать правильно.
if (($fp = fopen("test.csv", "r")) !== FALSE) {
while (($record = fgetcsv($fp)) !== FALSE) {
$row++;
}
echo $row;
}
Ответы
Ответ 1
Вот еще один вариант с помощью file()
для чтения всего файла в массив, автоматического разбора новых строк и т.д.:
$fp = file('test.csv');
echo count($fp);
Кроме того, начиная с PHP5, вы можете передать FILE_SKIP_EMPTY_LINES
..., чтобы пропустить пустые строки, если вы хотите:
$fp = file('test.csv', FILE_SKIP_EMPTY_LINES);
Вручную: http://php.net/manual/en/function.file.php
Ответ 2
Try
$c =0;
$fp = fopen("test.csv","r");
if($fp){
while(!feof($fp)){
$content = fgets($fp);
if($content) $c++;
}
}
fclose($fp);
echo $c;
Ответ 3
Создайте новую ссылку на файл с помощью SplFileObject
:
$file = new SplFileObject('test.csv', 'r');
Попробуйте seek
до наивысшего значения Int PHP:
$file->seek(PHP_INT_MAX);
Тогда на самом деле он будет искать самую высокую строку в файле, есть последняя строка, а последняя строка + 1 равна вашим общим строкам:
echo $file->key() + 1;
Трюк, но это не позволит вам загружать содержимое файла в память, что очень приятно делать при работе с действительно большими файлами.
Ответ 4
Я знаю, что это довольно старый, но на самом деле я столкнулся с тем же вопросом.
В качестве решения я бы предположил использовать конкретную логику Linux:
$rows = shell_exec('$(/bin/which cat) file.csv | $(/bin/which tr) "\r" "\n" | $(which wc) -l');
ПРИМЕЧАНИЕ: это работает только для Linux, и это нужно использовать, только если вы на 100% уверены, что в вашем файле нет многострочных ячеек
Ответ 5
Строки CSV разделяются разрывами строк. Поэтому разделите строки на разрывы строк, и вы получите массив строк, который является счетным.
if (($fp = fopen("test.csv", "r")) !== FALSE) {
$rows = explode("\n", $fp);
$length = count($rows);
echo $length;
}
Ответ 6
Я знаю, что это старый пост, но я искал эту проблему и обнаружил, что единственная проблема с исходным кодом заключалась в том, что вам нужно определить $row
вне цикла while, вот так:
if (($fp = fopen("test.csv", "r")) !== FALSE) {
$row = 1;
while (($record = fgetcsv($fp)) !== FALSE) {
$row++;
}
На всякий случай это помогает кому-то:) echo $row;
}
Ответ 7
$filename=$_FILES['sel_file']['tmp_name'];
$file=fopen($filename,"r");
$RowCount=0;
while ((fgetcsv($file)) !== FALSE)
{
$RowCount++;
}
echo $RowCount;
fclose($file);
Ответ 8
count (файл ('filename.csv', FILE_SKIP_EMPTY_LINES));
Ответ 9
Если вы получаете файл из формы
$file = $_FILES['csv']['tmp_name'];
$fp = new SplFileObject($file, 'r');
$fp->seek(PHP_INT_MAX);
echo $fp->key() + 1;
$fp->rewind();
Работает как шарм!!!!!!!!!!!!!!!!!!