Forum Webscript.Ru
Программирование => Perl => Тема начата: Yuraz от 07 Октября 2002, 09:09:59
-
Замучал наверное своими вопросами, но не могу справится своими силами :(
Есть файл, с записями примерно такими: текст, потом пустая строка, т.е. разделитель, потом опять текст абзатцем.
Выглядит это так (3 записи):
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
1Все сообщения о том, что якобы обнаружены члены съемочной группы Сергея Бодрова, не подтвердились. Об этом сообщили источники в оперативном шт
2Все сообщения о том, что якобы обнаружены члены съемочной группы Сергея Бодрова, не подтвердились. Об этом сообщили источники в оперативном
3Все сообщения о том, что якобы обнаружены члены съемочной группы Сергея Бодрова, не подтвердились. Об этом сообщили источники в операти
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
Как пройти файл и разбить на части, чтобы получился массив записей, для последующего обращения к любой из них по индексу? (один абзац=одна запись).
Можно ли это сделать с помощью нескольких регулярных выражений, без цикла? Если использовать цикл поиска разделителей (\\n\\n) то как перебирать, по буквам? то наверняка это очень трудоемко получится, файл может быть под мегабайт, размером....
-
{#начало блока
open(local *DATA, "путь/до/файл.dat") or die "файла нет";
local $/;
$/="\\n\\n";
while(){
$i++;
$hash{$i}=$_;
}
}#конец блока
#Конструкция open(local *DATA, "путь/до/файл.dat")
#позваляет не закрывать файл clos\'ом
#он будет закрыт при выходе из блока
#$/="\\n\\n"; Позволяет разделить входные данные по "\\n\\n"
-
Да дескриптор DATA предопределён Не используйте его пока не прочтёте о нём
-
{
open(local *DATA, "путь/до/файл.dat") or die "файла нет";
local $/;
$/="\\n\\n";
while( ){
chomp; #удолит из каждой строки "\\n\\n"
push @array, $_; #в массив так
}
}
-
Ленивый гость, пробовал этим способом, что то он не перебирает, длина хеша -1, внизу выдает, и вторым способом тоже самое, -1.
open (local *DATA, "local $/;
$/="\\n\\n";
while( ){
$i++;
$hash{$i}=$_;
}
close (DATA);
print $#hash; # = -1
-
print $#hash; # = -1
А -1 будет в любом случае :)
например:
%h = (1=>2,3=>4);
print $#h,"\\n"; #-1
print keys %h; #1 3
-
$#hash
- это не "длина хэша", а индекс последнего элемента массива @hash.
-
Может я перепутал с длиной массива? Тогда сори.
-
Ленивый гость спасибо, всё работает!
-
А как определить длину хеша? Всю книгу С Холзнера "Перл, справочник" перелистал, найти не могу :(
-
Например, по длине массива ключей :)
$hash_len = scalar keys %hash;