![]() |
Модераторы: ginnie, korob2001 |
![]() ![]() ![]() |
|
Zubilo |
|
||||
![]() Новичок Профиль Группа: Участник Сообщений: 12 Регистрация: 13.11.2007 Где: Химки Репутация: нет Всего: нет |
Всем доброго времени суток!
Затупил в следующей ситуации: есть текстовый файл такой структуры:
надо получить все поля и соответствующее им содержание(многострочный текст) в соответствующие переменные. поля получаю так:
получить текс не получается т.к. файл считывается построчно. Есть у кого-нибудь идеи как можно получить многострочный текст из файла? |
||||
|
|||||
DaemonSuw |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 155 Регистрация: 11.3.2008 Репутация: нет Всего: 3 |
Можно прочитать весь файл за одну операцию в скалярную переменную, если присвоить значение undef специальной переменной $/, в которой задается разделитель записей текстовых файлов. После прочтения файла в скаляр можно восстановить прежнее значение этой переменной "\n", которую она имела по умолчанию.
Пример: open(F,"<file.txt"); $/=undef; $sfile = <F>; $/="\n" ; $sfile =~ /регулярка/ |
|||
|
||||
KSURi |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 887 Регистрация: 8.6.2006 Где: Russia Репутация: 5 Всего: 27 |
Это сообщение отредактировал(а) KSURi - 22.5.2008, 01:07 -------------------- Died at Life.pl line 21 |
||||
|
|||||
amg |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1145 Регистрация: 3.8.2006 Где: Новосибирск Репутация: 9 Всего: 50 |
Еще вариант, менее изящный, но не требующий зачитывать файл целиком в память
|
|||
|
||||
yura_nev |
|
|||
Новичок Профиль Группа: Участник Сообщений: 14 Регистрация: 28.12.2007 Репутация: нет Всего: нет |
|
|||
|
||||
Zubilo |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 12 Регистрация: 13.11.2007 Где: Химки Репутация: нет Всего: нет |
Странно, но первые два варианта у меня работают не правильно, в чем затык не пойму :(
последний вариант работает . Всем огромное спасибо.
Это сообщение отредактировал(а) Zubilo - 22.5.2008, 13:33 |
|||
|
||||
ginnie |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1287 Регистрация: 6.1.2008 Где: Москва Репутация: 6 Всего: 49 |
yura_nev, может
заменить на
-------------------- Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг) |
||||
|
|||||
Zubilo |
|
||||||||
![]() Новичок Профиль Группа: Участник Сообщений: 12 Регистрация: 13.11.2007 Где: Химки Репутация: нет Всего: нет |
получается что лучше менять на
|
||||||||
|
|||||||||
nitr |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2543 Регистрация: 10.2.2006 Где: Россия :) Репутация: 2 Всего: 84 |
![]() yura_nev, я не встречал случая где надо было именно undef или присвоить что-либо, всегда достаточно было объявить local. Поправьте меня, вот чтиво perldoc perlsub Temporary Values via local() http://perldoc.perl.org/perlsub.html#Tempo...ues-via-local() |
|||
|
||||
ginnie |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1287 Регистрация: 6.1.2008 Где: Москва Репутация: 6 Всего: 49 |
Zubilo, Вы правы, я ошибся!
![]() -------------------- Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг) |
|||
|
||||
KSURi |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 887 Регистрация: 8.6.2006 Где: Russia Репутация: 5 Всего: 27 |
![]()
Поэтому с явным присваиванием undef'a просто немного логичнее выглядит имхо: ты временно присваиваешь глобальной переменной новое значение, которое по выходу из блока будет восстановлено обратно. Конструкция {local$/} тоже присвоит undef, только неявно. Если бы local создавал копию переменной для блока, тогда логичнее было бы делать так, как вы предложили. Во всяком случае я так думаю) -------------------- Died at Life.pl line 21 |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Perl: Системное программирование" | |
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Perl: Системное программирование | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |