Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > прочитать последнюю строку файла


Автор: Chort409 22.8.2008, 22:05
Приветствую All.
За дурость только сильно не пинайте. Есть такой простенький кусочек кода:
Код

$fh = fopen("some_file","r");
$ID =0;
while (! feof($fh))
{
    $line = fgets($fh, 4096);
    $conf_array = explode(' ',$line);
    $ID = $conf_array[1];
}
echo $ID;    

После завершения цикла переменная $ID обнуляеться, а мне надо получить последнее её значение... Как это сделать? подскажите пожалуйста ...

Автор: DioNiR 22.8.2008, 22:15
не правельный подход к получению последнего значения файла

Автор: Chort409 22.8.2008, 22:19
Цитата(DioNiR @  22.8.2008,  22:15 Найти цитируемый пост)
не правельный подход к получению последнего значения файла


Судовольствием послушаю как это надо делать.

Автор: DioNiR 22.8.2008, 22:22
Можно так:
Код
<?php
    $file = file('text.txt');
    rsort($file);
    echo $file[0];
?>

Автор: Chort409 22.8.2008, 22:42
Согласен, большое спасибо. Только надо не сортировать а просто взять обратный порядок, а то сортировка получаеться черте какая ...

Автор: Feldmarschall 22.8.2008, 22:55
DioNiR, это твой способ неправильный. 

Chort409, а ты чего соглашаешься? Тебе глупости пишут, а ты "спасибо". Своей головой иногда думать тоже надо. 
в принципе, на небольших файлах оба способа нормальные, но на больших будет работать только твой. зачем менять хороший код на плохой?
у тебя, небось, пустая строка в файле - вот её твой код последней и читает.
поставь другое условие, к примеру, пока длина прочитанной строки больше 2 симолов.



Автор: DioNiR 22.8.2008, 22:56
Ой не ту функцию поставил.
Надо так:
Код
<?php
    $file = file('text.txt');
    $file = array_reverse($file);
    echo $file[0];
?>


Добавлено через 4 минуты и 52 секунды
Feldmarschall, в данном вопросе речи не было о большом файле, поэтому не надо меня обвинять в том что я не прав.
Еслиб изначально было бы сказано что файл большой, то тогда бы я согласился с тобой.

Автор: Feldmarschall 22.8.2008, 23:10
какая разница - какой файл?
зачем писать заведомо менее оптимальный код?
зачем читать весь файл в память, если нужна только одна строчка? зачем создавать массив, когда никаких массивов не нужно, а потом еще и сортировать его?
Зачем про правильный подход писать, что он неправильный? А?

Автор: Mal Hack 22.8.2008, 23:16
Для очень больших файлов все эти алгоритмы можно класть фтопку.
Есть fseek, которым можно перекинуть указатель на n симовлом, в том числе и назад и прочитать что надо в конце.
Говоря о символах я говорю о байтах. Если мне не изменяет память, то с текстовыми файлами в ПХП это работает нормально с недавних времен.

Автор: HackMan 22.8.2008, 23:16
Если нужен последний элемент, то проще так:

Код

  $file = file('text.txt');
  echo end($file);

Автор: Chort409 22.8.2008, 23:39
Народ спасибо, столько нового поузнавал ))) но после в случае с while всеравно почему-то не работает ...Файл проверил. 

Автор: nornad 23.8.2008, 01:31
Получается, что у тебя в файле последняя строка либо пустая, либо не по формату.

Автор: Feldmarschall 23.8.2008, 09:04
Chort409, а ты не файл проверяй. А работу своего скрипта. Сейчас ты на него смотришь, как на шляпу фокусника - "ой, я в него файл положил". "Ой, из него ID вышел". "Ой, не вышел!" А что там внутри происходит - загадка. 
Но ты же ведь не фокусник. Ты программист. Ты сам эту программу писал. Ты должен знать, что там внутри происходит.
кто тебе мешает выводить не единственный последний ID, а еще и вспомогательную информацию? Каждую входящую строку, результат разбивки эксплодом, $ID - то есть, все участвующие в скрипте переменные. 
И смотреть - что с ними не так.

Если ты научишься искать и исправлять ошибки в своем собственном скрипте - это будет в миллион раз ценнее, чем любой работающий скрипт. Это будет означать, что вводя эти строчечки в редактор, ты не зря переводишь время. Что у тебя что-то получится, если ты собираешься как-то связывать свою жизнь с программированием.
Потому что программирование - это не когда ты написал 500 строк и ты пошел пиво пить. программирование - это когда ты два дня ищешь одну ошибку в 5 строчках. Умение написать готовый код не стоит ничего. Умение найти и исправить ошибку - это то, без чего вообще не имеет смысла заниматься программированием. 

Поэтому не надо слушать гадания - что у тебя там в файле не так. Надо запустить свой скрипт и проверить. Зачем какой-то файл проверять, если у тебя в скрипте есть все средства прверки?
используй функцию var_dump(), выводя отладочную информацию.

Автор: Chort409 25.8.2008, 17:33
Feldmarschall, спасибо за наставление младшему товарищу, пойду совершенствоваться.

Автор: anrs 21.1.2009, 13:22
А если надо вытянуть последнии 10 строчек , то какой код нужен ? 

Автор: s0lman 21.1.2009, 13:40
anrs, подсказать алгоритм?
Узнаем количество строк в файле, отнимаем 10 и выводим по порядку от полученного номера строки до конца файла (номер строки минус 1, если быть точным)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)