Модераторы: korob2001, ginnie

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Чтение файла побайтово 
V
    Опции темы
GoDleSS
Дата 21.3.2008, 18:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 105
Регистрация: 11.2.2007
Где: Пироговский

Репутация: 2
Всего: 2



Цитата

Какой коммандой это осуществляется?


стандартное указание $variable = <HANDLER>; читает из данного потока 1 строку, если переменная $/  не сброшена.
Поэтому можно попробовать такой алгоритм:
1. Перемещаемся в нужную точку с помощью seek, sysseek
2. читаем циклом нужное кол-во строк методом - считали/определили длину, сместились на длину строки, считали следующую и т.д.

Писать что-то ща и проверять лень =)
--------------------
It's a nice day to die my friend!
PM MAIL WWW ICQ   Вверх
ginnie
Дата 21.3.2008, 19:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1287
Регистрация: 6.1.2008
Где: Москва

Репутация: 38
Всего: 49



Уважаемый GoDleSS, не поясните ли мне, несмышленному, зачем нужно читать строки таким необычным методом (считали/определили длину, сместились на длину строки)?


--------------------
Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг)
PM MAIL Skype Jabber   Вверх
GoDleSS
Дата 21.3.2008, 20:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 105
Регистрация: 11.2.2007
Где: Пироговский

Репутация: 2
Всего: 2



Цитата

Уважаемый GoDleSS, не поясните ли мне, несмышленному, зачем нужно читать строки таким необычным методом (считали/определили длину, сместились на длину строки)?

Тут я немного поспешил, поэтому вывел глупость, но когда подумал - уже убежал с работы smile
Такой метод понадобится разве что для фиксированного чтения с конца файла, работая методом смещения на размер_файла-длина строки, да и то не уверен в этом варианте.

А для просто фиксированного чтения достаточно.

Код

my $linesToRead = 100;
open(F, $file);
  while (<F> && $linesToRed) {
    chomp;
    push(@array, $_);
    $linesToRead--;
  }
close(F);

--------------------
It's a nice day to die my friend!
PM MAIL WWW ICQ   Вверх
KSURi
Дата 21.3.2008, 21:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 887
Регистрация: 8.6.2006
Где: Russia

Репутация: 20
Всего: 27



OFFTOP:
Такой метод может понадобится для поиска в больших файлах (sliding window)


--------------------
Died at Life.pl line 21
PM Jabber   Вверх
ginnie
Дата 21.3.2008, 22:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1287
Регистрация: 6.1.2008
Где: Москва

Репутация: 38
Всего: 49



GoDleSS, я, наверное, неверно понимаю словосочетание "фиксированное чтение" как чтение данных постоянной длины.


KSURi, хотя бы намекните в чем смысл использование этого "метода".


--------------------
Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг)
PM MAIL Skype Jabber   Вверх
KSURi
Дата 21.3.2008, 23:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 887
Регистрация: 8.6.2006
Где: Russia

Репутация: 20
Всего: 27



Да чего уж намекать, читайте полностью - _http://www.perlmonks.org/?node_id=128925 =)
Правда у него имеется одно весьма существенное ограничение: в текущем читаемом блоке может находится только некоторый кусок текста, который попадает под заданный регекс, соотвественно совпадения не произойдет (или произойдет, но неправильное).


--------------------
Died at Life.pl line 21
PM Jabber   Вверх
GoDleSS
Дата 22.3.2008, 00:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 105
Регистрация: 11.2.2007
Где: Пироговский

Репутация: 2
Всего: 2



Цитата

GoDleSS, я, наверное, неверно понимаю словосочетание "фиксированное чтение" как чтение данных постоянной длины.

В данном случае я имел ввиду фиксированное кол-во строк. Понятие же условное, как и все в этом мире ;)

Просто если сделать:
$/=undef;
my $data=<HANDLER>;
или
my @data=<HANDLER>;
или
my @data=(<HANDLER>)[0..99];
с пара-гигабайтным логом - компу будет приятно )

OFFTOPIC:
нравится мне на этом форуме - люди любят докапываться до мелочей, а следовательно и самому приходится в них разбираться. В сочетании с новой работой перл-программистом так и гуру перлы можно со временем стать smile
--------------------
It's a nice day to die my friend!
PM MAIL WWW ICQ   Вверх
Perl_sapiens
Дата 22.3.2008, 01:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 95
Регистрация: 19.2.2008

Репутация: нет
Всего: нет



Да, действительно: на этом форуме докапываються до мелочей и это есть ГуД))
Теперь мне интересно что это за переменная: $/ Что она.. м... делает?
PM MAIL   Вверх
KSURi
Дата 22.3.2008, 01:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 887
Регистрация: 8.6.2006
Где: Russia

Репутация: 20
Всего: 27



perldoc perlvar
или первая _русская_  ссылка гугеля по заросу "специальные переменные perl"

Переменная устанавливает разделитель записей (строк).

Код

my @data = <FILE>; # "разделит" файл по значению $/, и каждый получившийся кусок будет присвоен элементу массива

равносильно
Код

local $/ = undef; # выделить в отдельный блок, чтобы влияние не распространилось на весь скрипт
my $data = <FILE>;


Это сообщение отредактировал(а) KSURi - 22.3.2008, 01:46


--------------------
Died at Life.pl line 21
PM Jabber   Вверх
ginnie
Дата 22.3.2008, 02:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1287
Регистрация: 6.1.2008
Где: Москва

Репутация: 38
Всего: 49



KSURi, наверное, я не совсем правильно понял описание метода, которое привел GoDleSS. Вот что я понял: мы открываем файл на чтение (создаем дескриптор). Переходим к некоторой позиции в файле и начинаем последовательное построчное считывание из файлового дескриптора. Насколько я знаю, при считывании из файла изменяется и текущая позиция, с которой будет продолжено считывание, поэтому никаких дополнительных манипуляций делать не нужно (аналогично считывание из файла происходит в алгоритме с движушимся окном по указанной выше ссылке), а GoDleSS написал еще про определение длины строки и смещение на это значение, что и стало причиной моего вопроса.

Это сообщение отредактировал(а) ginnie - 22.3.2008, 02:17


--------------------
Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг)
PM MAIL Skype Jabber   Вверх
PanamOS
Дата 22.3.2008, 04:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 54
Регистрация: 29.1.2008

Репутация: нет
Всего: нет



ginnie, про смещение вы правы, но это значение все равно пригодится при следующем использовании, чтобы не считывать все с нуля или той позиции, с которой считывали в первый раз.
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl"
korob2001
sharq
  • В этом разделе обсуждаются общие вопросы по языку Perl
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Если ваш вопрос относится к CGI программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", можно скачать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.4760 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.