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


Автор: PHPStudent 26.12.2005, 09:32
Здравствуйте. У меня такой вопрос:
Как мне считывать с файла строки с последней строки до первой.
Пример:
Есть файл "mim.txt". Его содержимое:
Строка 1
Строка 2
Строка 3
...
Строка n-1
Строка n

Необходимо, чтобы выводилось так:
Строка n
Строка n-1
...
Строка 3
Строка 2
Строка 1

Как мне это лучше реализовать?

Автор: Dave 26.12.2005, 09:41
http://ua2.php.net/file
дальше сам додумаешь.

Автор: PHPStudent 26.12.2005, 10:08
Я то умею загружать файл в массив.
Но вот так ничего не выводит:
Код

<?
  $txt_f=file("./text/text.txt");
  for($i=sizeof($txt_f);$i=0;$i--)
  {
    echo($txt_f[$i]);
  }
?>

Может что-то я делаю не так?

Автор: Dave 26.12.2005, 10:21
Цитата(PHPStudent @ 26.12.2005, 10:08)
for($i=sizeof($txt_f);$i=0;$i--)

ты понимаешь смысл этой строки ?
напиши что она делает

Автор: PHPStudent 26.12.2005, 10:25
Я дкмаю, что она считает элементы массива с конца. т.е. 9-8-7-6-5-4-3-2-1-0
Так думаю, что не правильно.
Если бы я был в чем-то уверен, то не постил бы. Помогите, плз, а не ссылки давайте.
smile

Заранее благодарен.

Автор: Dave 26.12.2005, 10:31
Цитата(PHPStudent @ 26.12.2005, 10:25)
Если бы я был в чем-то уверен, то не постил бы. Помогите, плз, а не ссылки давайте.

Как же ты собираешься программировать если ты не знаешь самого простого ? Теорию подымай.
Учимся работать с циклами.

идем сюда : http://ua.php.net/for


Автор: sugee 26.12.2005, 10:32
Код

<?
  $txt_f=array_reverse (file("./file.txt"));

  for($i=0; $i<sizeof($txt_f); $i++)
  {
    echo $txt_f[$i];
  }
?>

Автор: PHPStudent 26.12.2005, 10:40
Спасибо, Dave.
На счет того, что я программировать не умею, конечно, это ты зря...
На php не умею, согласен. Но есть же и другие языки smile

Значит решил проблему следующим образом. Подскажи, правильно?
Код

<?    
  $txt_f=file("./text/text.txt");    
  $i=sizeof($txt_f);
  while($i--)    
  {    
    echo($txt_f[$i]);    
  }    
?>

Автор: Dave 26.12.2005, 11:01
Цитата(PHPStudent @ 26.12.2005, 10:40)
На php не умею, согласен. Но есть же и другие языки

о пхп и говорим : )
ну ладно, погарячился я
Цитата(PHPStudent @ 26.12.2005, 10:40)

Значит решил проблему следующим образом. Подскажи, правильно?

тоже вариант.

ну а как с for сделать тоже самое тебе sugee написал.

Автор: Guest 26.12.2005, 13:19
Пояснили бы человеку...

2 PHPStudent. У тебя в условии цикла индекс $i получает значение 0, и результат проверки условия становится false, т.е цикл никогда не выполнится.

Цитата(PHPStudent @ 26.12.2005, 10:08)
Код

<?
  $txt_f=file("./text/text.txt");
  for($i=sizeof($txt_f);$i=0;$i--)
 // Надо было $i>=0,     ^^^ тогда бы работало.
  {
    echo($txt_f[$i]);
  }
?>

Может что-то я делаю не так?


Автор: shader 26.12.2005, 13:30
PHPStudent используй простой array_reverse(). Функция переворачивает массив задом наперед.

Цитата(sugee @ 26.12.2005, 10:32)
$txt_f=array_reverse (file("./file.txt"));

  for($i=0; $i<sizeof($txt_f); $i++)
  {
    echo $txt_f[$i];
  }


Автор: Mal Hack 26.12.2005, 13:41
Цитата(shader @ 26.12.2005, 13:30)
PHPStudent используй простой array_reverse(). Функция переворачивает массив задом наперед.

Зачем? Вполне можно организовать downto цикл и не грузить память реверсом.

Автор: PHPStudent 26.12.2005, 13:50
Я уже сделал. Но очень интересно.
Как это сделать через downto

Автор: XOMbl4 26.12.2005, 14:47
Я ужо задовал такой вопрос,вот код:
Код

//Считаем элементы массива
$count = count($inf);
//Отнимаем 1,если этого не сделать,будет куйня
$result=$count-1;
//Собчно цикла
for ($i = $result; $i--) {
     print("$inf[$i]<br>");
     if ($i == 0) {
     exit();
     }
}

Автор: Mal Hack 26.12.2005, 15:08
XOMbl4 а что, в цикле нельзя написать $i>=0 ???

Автор: Dave 26.12.2005, 15:15
Цитата(XOMbl4 @ 26.12.2005, 14:47)
Я ужо задовал такой вопрос,вот код:
Код

//Считаем элементы массива
$count = count($inf);
//Отнимаем 1,если этого не сделать,будет куйня
$result=$count-1;
//Собчно цикла
for ($i = $result; $i--) {
     print("$inf[$i]<br>");
     if ($i == 0) {
     exit();
     }
}

оч, плохой пример.
так делать не нужно

Автор: XOMbl4 26.12.2005, 16:35
Да?Чтож,буду переделывать...

Автор: shader 26.12.2005, 17:11
Цитата(Mal @ 26.12.2005, 13:41)
Цитата (shader @ 26.12.2005, 13:30)
PHPStudent используй простой array_reverse(). Функция переворачивает массив задом наперед.


Зачем? Вполне можно организовать downto цикл и не грузить память реверсом.



PHPStudent используй downto цикл smile.

Mal Hack понял, а в каких случаях лучше использовать array_reverse()?

Автор: Mal Hack 26.12.2005, 17:19
Цитата(shader @ 26.12.2005, 17:11)
Mal Hack понял, а в каких случаях лучше использовать array_reverse()?

Это уже от конкретной задачи зависит. Если надо к примеру большой массив перевернуть, то скорее оптимальнее будет array_reverse воспользоваться. Ну или когда небходимо сохранить исходный массив.

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