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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вырезать куски текста 
:(
    Опции темы
Error202
  Дата 6.7.2010, 09:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Господа!

Есть текстовый файл вида:

Код

:Test1
text text text text text text
text text text text text text
text text text text text text
end

:Test2
text2 text2 text2 text2 text2 text2
text2 text2 text2 text2 text2 text2
text2 text2 text2 text2 text2 text2
end

:Test3
text3 text3 text3 text3 text3 text3
text3 text3 text3 text3 text3 text3
text3 text3 text3 text3 text3 text3
end

:Test4
text4 text4 text4 text4 text4 text4
text4 text4 text4 text4 text4 text4
text4 text4 text4 text4 text4 text4
end


Как можно из этого всего сделать хэш вида:
$hash{Test1}='test test test...';
$hash{Test2}='test2 test2 test2...';
$hash{Test3}='test3 test3 test3...';
$hash{Test4}='test4 test4 test4...';

Спасибо!


PM MAIL WWW   Вверх
Jimy
Дата 6.7.2010, 10:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Читай файл построчно. Когда встречается строка начинающаяся с ":" определяешь ключ хэша по остатку строки (без двоеточия) и все остальные строки помещаешь в значение пока не встретится "end".
А извратится через регулярное выражения я не знаю как - я бы не заморачивался

Это сообщение отредактировал(а) Jimy - 6.7.2010, 10:19
PM   Вверх
Jimy
Дата 6.7.2010, 11:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



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

Код

$text_from_file =~ s/\n/\r/g;
my @tests = split(':', $text_from_file);
my %hash;
foreach (@tests) {
    $_ =~ m/(.*?)\r(.*?)end\r$/;
    $hash{$1} = $2;
    $hash{$1} =~ s/\r/\n/g;
}



Это сообщение отредактировал(а) Jimy - 6.7.2010, 11:04
PM   Вверх
Error202
Дата 6.7.2010, 11:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Спасибо... все попробую
PM MAIL WWW   Вверх
ming
Дата 6.7.2010, 12:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Код

my $text = .... ; # получаем содержимое из файла
my %hash = ();

while($text =~ /:(.+?)\n(.+?)\nend/gs) {
    $hash{$1} = $2;
}

в винде работает, под никсами не пробовал

Это сообщение отредактировал(а) ming - 6.7.2010, 12:55
PM MAIL ICQ Jabber   Вверх
7528620xs
Дата 19.8.2010, 12:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



А извратится через регулярное выражения я не знаю как - я бы не заморачивался




ugg boots discount/ugg adirondack/ugg boot
PM MAIL   Вверх
KSURi
Дата 19.8.2010, 14:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Говоря об извращениях ;)
Код

my %hash;
while(<DATA>) {
    chomp;
    if(/^:(Test\d+)$/ .. /^end$/) {
        next unless $1;
        if(exists $hash{$1}) { $hash{$1} .= $_ } 
        else                 { $hash{$1} = '' } # skip first entry 
    }
}


Это сообщение отредактировал(а) KSURi - 19.8.2010, 14:56


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


Бывалый
*


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

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



Цитата

Говоря об извращениях ;)


ну нормально smile 
как-то видел примерно следующую конструкцию для генератора случайных чисел от 0..9
креатиФ smile  и бросте в меня камнем если это чудо не работает  smile  

Код

if (!fork ())
    {
    $_ = $$;
    while(/^[-]?\d{2,}$/)
        {
        my $l = 0;
        map {$l += $_} /\d{1}/g;
        $_ = $l;
        }
    print;
    }


и вуаля   smile 
--------------------
Участник движения Культура Вождения
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: Регулярные выражения | Следующая тема »


 




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


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

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