![]() |
|
Модераторы: korob2001, ginnie |
![]()
|
|
| GoDleSS |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 105 Регистрация: 11.2.2007 Где: Пироговский Репутация: 2 Всего: 2 |
стандартное указание $variable = <HANDLER>; читает из данного потока 1 строку, если переменная $/ не сброшена. Поэтому можно попробовать такой алгоритм: 1. Перемещаемся в нужную точку с помощью seek, sysseek 2. читаем циклом нужное кол-во строк методом - считали/определили длину, сместились на длину строки, считали следующую и т.д. Писать что-то ща и проверять лень =) --------------------
It's a nice day to die my friend! |
|||
|
||||
| ginnie |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1287 Регистрация: 6.1.2008 Где: Москва Репутация: 38 Всего: 49 |
Уважаемый GoDleSS, не поясните ли мне, несмышленному, зачем нужно читать строки таким необычным методом (считали/определили длину, сместились на длину строки)?
-------------------- Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг) |
|||
|
||||
| GoDleSS |
|
||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 105 Регистрация: 11.2.2007 Где: Пироговский Репутация: 2 Всего: 2 |
Тут я немного поспешил, поэтому вывел глупость, но когда подумал - уже убежал с работы Такой метод понадобится разве что для фиксированного чтения с конца файла, работая методом смещения на размер_файла-длина строки, да и то не уверен в этом варианте. А для просто фиксированного чтения достаточно.
--------------------
It's a nice day to die my friend! |
||||
|
|||||
| KSURi |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 887 Регистрация: 8.6.2006 Где: Russia Репутация: 20 Всего: 27 |
OFFTOP:
Такой метод может понадобится для поиска в больших файлах (sliding window) -------------------- Died at Life.pl line 21 |
|||
|
||||
| ginnie |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1287 Регистрация: 6.1.2008 Где: Москва Репутация: 38 Всего: 49 |
GoDleSS, я, наверное, неверно понимаю словосочетание "фиксированное чтение" как чтение данных постоянной длины.
KSURi, хотя бы намекните в чем смысл использование этого "метода". -------------------- Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг) |
|||
|
||||
| KSURi |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 887 Регистрация: 8.6.2006 Где: Russia Репутация: 20 Всего: 27 |
Да чего уж намекать, читайте полностью - _http://www.perlmonks.org/?node_id=128925 =)
Правда у него имеется одно весьма существенное ограничение: в текущем читаемом блоке может находится только некоторый кусок текста, который попадает под заданный регекс, соотвественно совпадения не произойдет (или произойдет, но неправильное). -------------------- Died at Life.pl line 21 |
|||
|
||||
| GoDleSS |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 105 Регистрация: 11.2.2007 Где: Пироговский Репутация: 2 Всего: 2 |
В данном случае я имел ввиду фиксированное кол-во строк. Понятие же условное, как и все в этом мире ;) Просто если сделать: $/=undef; my $data=<HANDLER>; или my @data=<HANDLER>; или my @data=(<HANDLER>)[0..99]; с пара-гигабайтным логом - компу будет приятно ) OFFTOPIC: нравится мне на этом форуме - люди любят докапываться до мелочей, а следовательно и самому приходится в них разбираться. В сочетании с новой работой перл-программистом так и гуру перлы можно со временем стать --------------------
It's a nice day to die my friend! |
|||
|
||||
| Perl_sapiens |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 95 Регистрация: 19.2.2008 Репутация: нет Всего: нет |
Да, действительно: на этом форуме докапываються до мелочей и это есть ГуД))
Теперь мне интересно что это за переменная: $/ Что она.. м... делает? |
|||
|
||||
| KSURi |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 887 Регистрация: 8.6.2006 Где: Russia Репутация: 20 Всего: 27 |
perldoc perlvar
или первая _русская_ ссылка гугеля по заросу "специальные переменные perl" Переменная устанавливает разделитель записей (строк).
равносильно
Это сообщение отредактировал(а) KSURi - 22.3.2008, 01:46 -------------------- Died at Life.pl line 21 |
||||
|
|||||
| ginnie |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1287 Регистрация: 6.1.2008 Где: Москва Репутация: 38 Всего: 49 |
KSURi, наверное, я не совсем правильно понял описание метода, которое привел GoDleSS. Вот что я понял: мы открываем файл на чтение (создаем дескриптор). Переходим к некоторой позиции в файле и начинаем последовательное построчное считывание из файлового дескриптора. Насколько я знаю, при считывании из файла изменяется и текущая позиция, с которой будет продолжено считывание, поэтому никаких дополнительных манипуляций делать не нужно (аналогично считывание из файла происходит в алгоритме с движушимся окном по указанной выше ссылке), а GoDleSS написал еще про определение длины строки и смещение на это значение, что и стало причиной моего вопроса.
Это сообщение отредактировал(а) ginnie - 22.3.2008, 02:17 -------------------- Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг) |
|||
|
||||
| PanamOS |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 54 Регистрация: 29.1.2008 Репутация: нет Всего: нет |
ginnie, про смещение вы правы, но это значение все равно пригодится при следующем использовании, чтобы не считывать все с нуля или той позиции, с которой считывали в первый раз.
|
|||
|
||||
![]()
|
| Правила форума "Perl" | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Perl: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |