За последние 24 часа нас посетил 18091 программист и 1599 роботов. Сейчас ищут 917 программистов ...

Чтение строк из файла

Тема в разделе "PHP для новичков", создана пользователем amplifier, 2 дек 2008.

  1. amplifier

    amplifier Активный пользователь

    С нами с:
    19 ноя 2008
    Сообщения:
    49
    Симпатии:
    0
    Здравствуйте!
    Возникла такая проблема. Мне нужно читать сроки строки из файла. Я делаю это функцией fgets(), затем каждая строка превращается в массив через explode().

    Но в файле может появиться такая запись
    Посоветуйте пожалуйста как можно прочитать такую запись, чтобы структура чтения из файла осталась той же.
    Заранее спасибо!
     
  2. sobachnik

    sobachnik Старожил

    С нами с:
    20 апр 2007
    Сообщения:
    3.380
    Симпатии:
    13
    Адрес:
    Дмитров, МО
    Наверно я не понял, что ты хочешь... Но вообще если ты explode - м разбиваешь строку по символу | - то он верёт массив типа
    Код (Text):
    1. [0] => 11
    2. [1] => "<table>
    3. <tr>
    4. <td>
    5. text3
    6. </td>
    7. </tr>
    8. </table>"
    9. [2] => true
    Вроде тебе так и надо? Или чего?...
     
  3. amplifier

    amplifier Активный пользователь

    С нами с:
    19 ноя 2008
    Сообщения:
    49
    Симпатии:
    0
    Да он вернет именно это, но если прочитать запись полностью!
    fgets читает строку так
    Код (Text):
    1.  
    2. 11|<table>
    И этот результат поступает в explode(). А мне надо каким то образом полностью прочитать запись
     
  4. djunkie

    djunkie Активный пользователь

    С нами с:
    19 ноя 2008
    Сообщения:
    134
    Симпатии:
    0
    PHP:
    1. $filetext = file("text.txt");
    2.  
    дальше уже работать с массивом
     
  5. amplifier

    amplifier Активный пользователь

    С нами с:
    19 ноя 2008
    Сообщения:
    49
    Симпатии:
    0
    Я думаю обработку массива будет сложно реализовать.
    Есть вариант использовать readfile() с добавлением к каждой записи в конце какого либо символа и затем применение explode() по этому символу
     
  6. amplifier

    amplifier Активный пользователь

    С нами с:
    19 ноя 2008
    Сообщения:
    49
    Симпатии:
    0
    Тогда подскажите какой символ можно использовать для обозначения конца записи чтобы была 100% уверенность что он не встретится в записи?
     
  7. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    amplifier
    serialize()
    unserialize()
    file_get_contents()
    file_put_contents()

    ну или заменять в записях разделительный символ, скажем на его html сущтность
     
  8. amplifier

    amplifier Активный пользователь

    С нами с:
    19 ноя 2008
    Сообщения:
    49
    Симпатии:
    0
    Чет нифига не выходит((( Пробовал с преобразованием html сущностей (htmlspecialchars() и htmlentitie()) - заменяются только хтмл теги, переносы в строке остаются. Пробовал serialize - тоже не помогло( может я не там их применяю (перед записью в файл)?
     
  9. karakh

    karakh Активный пользователь

    С нами с:
    11 дек 2007
    Сообщения:
    1.344
    Симпатии:
    0
    используй символ "|", он у тебя и так разделителем работает. Читай все сразу, делай explode() и соединяй по три.
    Если в записи встретится лишний "|", значит у тебя в любом случае все полетит.
     
  10. free-bits

    free-bits Активный пользователь

    С нами с:
    13 ноя 2008
    Сообщения:
    296
    Симпатии:
    0
    Адрес:
    г. Красноярск
    А как по 3 соединять?
     
  11. karakh

    karakh Активный пользователь

    С нами с:
    11 дек 2007
    Сообщения:
    1.344
    Симпатии:
    0
    как выделить три идущих подряд элемента из массива и соединить их - ты об этом спрашиваешь?
     
  12. free-bits

    free-bits Активный пользователь

    С нами с:
    13 ноя 2008
    Сообщения:
    296
    Симпатии:
    0
    Адрес:
    г. Красноярск
    Я не про то подумал=)
     
  13. amplifier

    amplifier Активный пользователь

    С нами с:
    19 ноя 2008
    Сообщения:
    49
    Симпатии:
    0
    Дело в том что, количество элементов в строке не известно заранее, т.е. оно может быть и больше 3-х
     
  14. amplifier

    amplifier Активный пользователь

    С нами с:
    19 ноя 2008
    Сообщения:
    49
    Симпатии:
    0
    Но зато известно что их ровно столько сколько их в первой строке, которая как бы задает названия полей таблицы (и ключей массива). Т.е. еще предварительно надо будет первую строку читать. Насколько я понимаю это повторное открытие файла будет влиять на скорость выполнения кода если файл большой?
     
  15. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    ну как то так -
    Код (Text):
    1. str_replace("|","&#".ord('|').";",$text);
    она вообще преврощает массив в строку, ничего заменять там не надо, читай мануал
     
  16. amplifier

    amplifier Активный пользователь

    С нами с:
    19 ноя 2008
    Сообщения:
    49
    Симпатии:
    0
    спасибо большое за совет! Заменил таким образом '\n' и '\r' и все заработало:)

    karakh, djunkie, sobachnik спасибо за содействие