PHP способ получить количество строк в файле и переместить указатель файла на указанную строку? [закрыто]
Есть ли способ:
- подсчитайте количество строк (1 строка = строка данных) в моем small_db.php
- скажите PHP переместить указатель файла точно в начало строки 322. (чтобы я мог fgets() данные из этой строки)
- скажите PHP, чтобы он вернул номер строки или все содержимое строки, в которой встречается текст "Быстрая коричневая лиса"?
Я знаю, что есть другой способ получить все содержимое файла в одной строке, но, как вы знаете, этот метод неэффективен по времени и памяти, если размер файла большой.
1 answers
Для начала приведем некоторые основные переменные:
$filename = 'small_db.php';
$linenum = 322;
$needle = 'Quick brown fox';
-
Как я могу посчитать количество строк в файле?
Чтобы сделать это быстро и легко, используйте
count()
после того, как вы откроете файл сfile()
:$count = count( file( $filename));
Однако для этого потребуется много памяти , если ваш файл большой, так как он должен загрузить весь файл в память, чтобы посчитать возвращаемое значение из
file()
. В качестве альтернативы вы можете использовать стандартный функции файлов,fopen()
,feof()
,fgets()
, иfclose()
, чтобы открыть файл и прочитать его строчку за строчкой, ведя счет по ходу, вот так:$count = 0; $fp = fopen( $filename, 'r'); while( !feof( $fp)) { fgets( $fp); $count++; } fclose( $fp);
-
Как я могу переместить указатель файла в начало определенного номера строки?
Это лучше всего достигается с помощью
SplFileObject
класс. Вы создаете новый объект этого класса с именем файла, который вы открываете, затем используетеseek()
стремиться к номер строки по вашему выбору. Затем вы можете использоватьkey()
чтобы показать номер строки иcurrent()
( илиgetCurrentLine()
илиfgets()
) чтобы получить содержимое этой строки, вот так:// Create a new object for the file $file = new SplFileObject( $filename); // Seek to to the specific line number $file->seek( $linenum); // Print that line: echo 'Line #' . $file->key() . ' contains: ' . $file->current();
-
Как я могу вернуть номер строки или все содержимое строки, в которой встречается определенная игла?
Насколько я знаю, нет встроенных функций/методов PHP, которые могли бы это сделать. Вам нужно будет разобрать его самостоятельно с помощью чего-нибудь аналогично этой функции, которая проверяет каждую строку в файле, заданную указателем на файл
$fp
, на соответствие определенному регистру$needle
с использованиемstrpos()
( вы можете использоватьstripos()
для поиска без учета регистра):function find_in_file( $fp, $needle) { rewind( $fp); // Or: fseek($fp, 0); $line_number = 0; while( !feof( $fp)) { $line = fgets( $fp); if( !( strpos( $line, $needle) === false)) { break; } $line_number++; } return feof( $fp) ? null : array( 'line_number' => $line_number, 'line' => fgets( $fp) ); }
Вам нужно было бы вызвать эту функцию следующим образом:
$fp = fopen( $filename, 'r'); $return = find_in_file( $fp, $needle); if( !is_null( $return)) { echo 'Found ' . $needle . ' in line #' . $return['line_number'] . "\n"; echo 'That line contains: ' . $return['line']; } fclose( $fp);