Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: Общие вопросы > Задача на тему поиск по шаблону


Автор: Gandhi 18.2.2011, 10:22
Сама задача из книги - Perl за 24 часа
6й час, если кто читал..

сама задача состоит в том:

Напиcать короткую программу, которая делает следующее.
1. Открывает файл.
2. Считывает все его строки в массив.
3. Извлекает все слова из каждой строки.
4. Находит все слова с четырьмя и большим количеством смежных согласных
букв, например слова thoughts или yardstick.

мне очень тяжело дается данный материал..
начинаю 
Код

#!/usr/bin/perl -w


далее открываю файл в который я написал те слова
Код

open(MYFILE, "short_file") || die "Ошибка открытия файла short_file: $!";


его сую в массив, закрываю
Код

@words=<MYFILE>;
close(MYFILE)


не пойму как это извлечь все слова из каждой строки.. и найти слова в том файле с четырьмя и др смежн согласных..

если можно, поясняте ответ  smile 

Автор: alezzz 18.2.2011, 11:21
Код

@text=<MYFILE>;   # лучше назвать переменную text, words как название пригодиться дальше
foreach (@text){     # читаем массив поэлементно, т.е. текст построчно, циклы
    @words = split(/\s+/);  # надеемся что слова отделены пробелами, простейший вариант, получаем массив слов
    foreach (@words){  # перебираем строку по словам
        print "$_\n" if /[qwrtpsdfghjklzxcvbnm]{4,}/  # печатаем слово если в нем 4 и более согласных, регулярные выражения
    }
}

Автор: Gandhi 18.2.2011, 14:42
да! спасибо
это отличный вариант, теперь эта глава стала немного яснее

Автор: vivu 19.2.2011, 16:54
Код

#!/usr/bin/perl
use strict;

open MYFILE, 'test' or die "Can't open file $!";

print join "\n", grep {/[qwrtpsdfghjklzxcvbnm]{4,}/} map { split /\s+/ } <MYFILE>;
print $/;

close MYFILE;


Вы как новичок должны знать что на perl можно ещё вот так. Но если такая запись вам не понятна, то голову себе этим пока не забивайте.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)