Forum Webscript.Ru

Программирование => Perl => Тема начата: Yuraz от 07 Октября 2002, 09:09:59

Название: 2. Как txt файл разбить на абзатцы, и абз. записать в хеш?
Отправлено: Yuraz от 07 Октября 2002, 09:09:59
Замучал наверное своими вопросами, но не могу справится своими силами :(
Есть файл, с записями примерно такими: текст, потом пустая строка, т.е. разделитель, потом опять текст абзатцем.
Выглядит это так (3 записи):
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
1Все сообщения о том, что якобы обнаружены члены съемочной группы Сергея Бодрова, не подтвердились. Об этом сообщили источники в оперативном шт

2Все сообщения о том, что якобы обнаружены члены съемочной группы Сергея Бодрова, не подтвердились. Об этом сообщили источники в оперативном

3Все сообщения о том, что якобы обнаружены члены съемочной группы Сергея Бодрова, не подтвердились. Об этом сообщили источники в операти
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

Как пройти файл и разбить на части, чтобы получился массив записей, для последующего обращения к любой из них по индексу? (один абзац=одна запись).

Можно ли это сделать с помощью нескольких регулярных выражений, без цикла? Если использовать цикл поиска разделителей (\\n\\n) то как перебирать, по буквам? то наверняка это очень трудоемко получится, файл может быть под мегабайт, размером....
Название: 2. Как txt файл разбить на абзатцы, и абз. записать в хеш?
Отправлено: Ленивый гость от 07 Октября 2002, 10:51:14
{#начало блока
open(local *DATA, "local $/;
$/="\\n\\n";
while(){
   $i++;
   $hash{$i}=$_;
}
}#конец блока


#Конструкция open(local *DATA, "#позваляет не закрывать файл clos\'ом
#он будет закрыт при выходе из блока

#$/="\\n\\n"; Позволяет разделить входные данные по "\\n\\n"
Название: 2. Как txt файл разбить на абзатцы, и абз. записать в хеш?
Отправлено: Ленивый гость от 07 Октября 2002, 11:45:07
Да дескриптор DATA предопределён Не используйте его пока не прочтёте о нём
Название: 2. Как txt файл разбить на абзатцы, и абз. записать в хеш?
Отправлено: Ленивый гость от 07 Октября 2002, 12:01:10
{
open(local *DATA, "local $/;
$/="\\n\\n";
while( ){
chomp;    #удолит из каждой строки "\\n\\n"
push @array, $_; #в массив так
}
}
Название: 2. Как txt файл разбить на абзатцы, и абз. записать в хеш?
Отправлено: Yuraz от 07 Октября 2002, 19:59:32
Ленивый гость, пробовал этим способом, что то он не перебирает, длина хеша -1, внизу выдает, и вторым способом тоже самое, -1.

open (local *DATA, "local $/;
$/="\\n\\n";
while( ){
$i++;
$hash{$i}=$_;
}
close (DATA);

print $#hash;   # = -1
Название: 2. Как txt файл разбить на абзатцы, и абз. записать в хеш?
Отправлено: mike от 07 Октября 2002, 20:37:57
Цитировать
print $#hash; # = -1

А -1 будет в любом случае :)

например:

%h = (1=>2,3=>4);
print $#h,"\\n"; #-1
print keys %h; #1 3
Название: 2. Как txt файл разбить на абзатцы, и абз. записать в хеш?
Отправлено: YA от 08 Октября 2002, 00:07:38
Цитировать
$#hash
- это не "длина хэша", а индекс последнего элемента массива @hash.
Название: 2. Как txt файл разбить на абзатцы, и абз. записать в хеш?
Отправлено: Yuraz от 08 Октября 2002, 06:04:08
Может я перепутал с длиной массива? Тогда сори.
Название: 2. Как txt файл разбить на абзатцы, и абз. записать в хеш?
Отправлено: Yuraz от 08 Октября 2002, 07:58:50
Ленивый гость  спасибо, всё работает!
Название: 2. Как txt файл разбить на абзатцы, и абз. записать в хеш?
Отправлено: Yuraz от 08 Октября 2002, 13:15:30
А как определить длину хеша? Всю книгу С Холзнера "Перл, справочник" перелистал, найти не могу :(
Название: 2. Как txt файл разбить на абзатцы, и абз. записать в хеш?
Отправлено: mike от 08 Октября 2002, 13:31:14
Например, по длине массива ключей :)

$hash_len = scalar keys %hash;