The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



"Навигация в текстовом файле"
Версия для распечатки Пред. тема | След. тема
Форум WEB технологии
Исходное сообщение [ Отслеживать ]

. "Навигация в текстовом файле" +1 +/
Сообщение от ACCA (ok), 12-Июн-11, 01:01 
> Пишу пакетный обработчик больших текстовых файлов (более Гб)

По нынешним временам - ни фига не большой. Засоси в массив по строке на элемент массива и играйся.


Кошерно тоже можно, только ненужной возни больше.

> 1) Напечатать все строки, которые на 10 выше искомой и на 5

Сделай кольцевой буфер на 16 элементов. Набей строками. Потом проверь 11-й элемент. Если совпало, забирай первый и последний. Можешь взять RingBuffer с CPAN, можешь сам написать - штука достаточно тривиальная.

Если совсем лень возиться - набивай строки в список с помощью push, выбрасывай с помощью shift, всё время проверяя 11-й элемент:

for (my $i=0; $i< 15; $i++) {
    push @buff, scalar(<>);
}

while (<>) {
    push @buff, $_;
    if ($buff[10] =~ /regexp/) {
        print @buff[0,10,15];
        ... other stuff ...
    }
    shift @buf;
}

> 2) Найти строку по ключу, провести поиск вверх по другому ключу и
> напечатать найденную строку. И так для всех ключевых строк.

Я бы это за два прохода сделал. Сначала сделал индекс первых ключей - где сидят и кто у них второй ключ, за второй проход нашёл ближайшие вторые ключи и вывел их.

Если ключей ожидается больше, чем доступной памяти, используй Tie::File или DBM.

Ответить | Правка | Наверх | Cообщить модератору

Оглавление
Навигация в текстовом файле, AndyTacker, 10-Июн-11, 20:46  [смотреть все]
Форумы | Темы | Пред. тема | След. тема



Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру