[perl] огромная строка

Sasha21

допустим есть файл весом 150мб и представляющая собой одну строку.
как быстрее всего вырезать из нее примерно 10000 всяческий перекрывающихся подстрок с известными координатами?

stm7583298

seek + tell
либо вчитай его целиком, разбей по символам и вперед

Sasha21

seek + tell
поковырял маны но так и не понял что они творят и как эот использовать, пример можешь привести?

Sasha21

дополнительный вопрос - как в перл читать файла по байтам?

sakura

Можно вот так сделать:

#!usr/bin/perl

# Создаем массив хэшей с информацией о подстроках:
# offset - расстояние до подстроки от начала файла
# length - длина подстроки
my @substrings = (
{
offset => 3,
length => 2
},
{
offset => 7,
length => 3
}
);

open(F, $ARGV[0]) or die "Can't open file '$ARGV[0]': $!";

my $buffer;
foreach my $substring (@substrings)
{
# Ставим указатель в нужное место файла
seek(F, $substring->{offset}, 0);

# Зачитываем, что нужно в переменную $buffer
read(F, $buffer, $substring->{length});

print "'$buffer'\n";
}

close F;

Я тестировал на такой строке: "012aa56bbb9". Вырезал из нее буквы.

Sasha21

read(F, $buffer, $substring->{length});
Большое спасибо, то что нужно... seek+read вырвали 700000 кусков из 49 файлов менее чем за 10 минут
Оставить комментарий
Имя или ник:
Комментарий: