[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Fgets и первод строки
web-dev
Приветствую! Пожалуйста объясните нубу, почему у меня функция fgets() читает файл до конца, не взирая на символы перевода строк. Вот собственно код:

PHP
<?php
$handle 
= @fopen("test.txt""r");
if (
$handle) {
    while (!
feof($handle)) {
        
$buffer fgets($handle);
        echo 
$buffer;
    }
    
fclose($handle);
}


Файл test.txt :
строка 1
строка 2
строка 3

php.net читал - не понял.



Спустя 27 минут, 23 секунды (2.08.2009 - 20:34) twin написал(а):
А как он должен их читать?

Спустя 4 минуты, 44 секунды (2.08.2009 - 20:38) Raito-kun написал(а):
если ты хочешь читать построчно, используй file():

PHP
<?php
    
echo "Строчки<br />";
    
$buffer file("test.txt");

    foreach(
$buffer as $key => $value)
           echo (
$key+1).":".$value."<br />";

    
fclose($handle);


Спустя 3 минуты, 25 секунд (2.08.2009 - 20:42) web-dev написал(а):
Цитата (twin @ 2.08.2009 - 17:34)
А как он должен их читать?

Ааа, пля. Там же цикл, т.е. перезаписывается переменная. Вот я тормоз. Спасибо!

Raito-kun
Да я пока ничего не делаю. Сижу с самоучителем и меня тупит иногда.

Спустя 22 часа, 37 минут, 28 секунд (3.08.2009 - 19:19) web-dev написал(а):
Цитата (Raito-kun @ 2.08.2009 - 17:38)
если ты хочешь читать построчно, используй file():

PHP
<?php
    echo 
"Строчки<br />";
    $buffer = file("test.txt");

    foreach($buffer as $key => $value)
           echo ($key+1).":".$value."<br />";

    fclose($handle);

Про file() ещё вопросик: как работает параметр FILE_SKIP_EMPTY_LINES? Я что то не пойму, есть тот же файлик:

строка 1


строка 2
строка 3

Так он и выдает:

Array
(
[0] => строка 1
[1] =>
[2] =>
[3] => строка 2
[4] => строка 3
)


код:
PHP
<?php
$str
=file("1.txt"FILE_IGNORE_NEW_LINES FILE_SKIP_EMPTY_LINES);
print_r ($str);

Спустя 4 часа, 11 минут, 48 секунд (3.08.2009 - 23:31) Raito-kun написал(а):
да, с этим проблема. в windows функция file() добавляет "\r\n" в конец строки, посему рекумендуется использовать rtrim() вместо FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES. не вдавался в подробности, полное обсуждение проблемы тут.

Спустя 3 часа, 25 минут, 7 секунд (4.08.2009 - 02:56) twin написал(а):
PHP
$str=file("1.txt"FILE_IGNORE_NEW_LINES FILE_SKIP_EMPTY_LINES);
не работает под виндой.
Нужно
PHP
$file file("1.txt");
$file array_map("rtrim",$file);

Спустя 12 часов, 40 минут, 46 секунд (4.08.2009 - 15:37) web-dev написал(а):
Raito-kun
twin

Как я понимаю rtrim удалят пробельные символы в конце строки, а \r\n разве считается за пробел?
Так даже если так, то мы все равно получаем массив строк с обрезанным концом
Array
(
[0] => строка 1
[1] =>
[2] =>
[3] => строка 2
[4] => строка 3
)
а как сделать что бы в 1-й и 2-й элементы записались строки 2 и 3? Вот в чём вопрос мой.

Спустя 13 минут, 8 секунд (4.08.2009 - 15:50) sergeiss написал(а):
Цитата (web-dev @ 4.08.2009 - 16:37)
а как сделать что бы в 1-й и 2-й элементы записались строки 2 и 3? Вот в чём вопрос мой.

Используй функцию array_filter(), а в качестве функции обратного вызова используй, самодельную. Которая будет возвращать false, если в строке только проблы и/или знаки \r\n.
rtrim удаляет также (по умолчанию, если нету второго параметра) и табуляцию, и "новую строку", и еще ряд символов.


_____________
IT - это такая область, что приходится постоянно бежать вперед, чтобы оставаться на месте.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.