Автор Тема: Поиск по TXT-файлу perl-скриптом...  (Прочитано 5126 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн LEO

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 5
  • +0/-0
  • 0
    • Просмотр профиля
    • http://kimsite.wallst.ru
Поиск по TXT-файлу perl-скриптом...
« : 10 Апреля 2001, 15:46:40 »
Есть текстовый файл. Каждая строчка - отдельная фраза или предложение. Как произвести поиск по одному слову внутри этого файла perl-скриптом и записать все найденные строчки с этим словом в массив. А если влет, то как находить совпадения по друм и более словам?
Желательно рабочий пример. :)
Мой сайт - http://kimsite.wallst.ru

Оффлайн Ilya

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 108
  • +0/-0
  • 0
    • Просмотр профиля
    • www.svd.ru
Поиск по TXT-файлу perl-скриптом...
« Ответ #1 : 10 Апреля 2001, 19:29:33 »
$file = "file.txt"; # Файл
$search = "Слово"; # Слово для поиска

open(FILE,"$file);
while()
{if(/$search/i){push @matches, $_;}}
close(DATAFILE);

В масиве @matches строки из файла содержащие слово $search.

Оффлайн LEO

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 5
  • +0/-0
  • 0
    • Просмотр профиля
    • http://kimsite.wallst.ru
Поиск по TXT-файлу perl-скриптом...
« Ответ #2 : 10 Апреля 2001, 21:38:34 »
Цитировать
ILYA (10-04-2001 19:29):
$file = "file.txt"; # Файл
$search = "Слово"; # Слово для поиска

open(FILE,"$file);
while()
{if(/$search/i){push @matches, $_;}}
close(DATAFILE);

В масиве @matches строки из файла содержащие слово $search.

Спасибо за точный и быстрый ответ. Но у меня еще вопрос:
это в смысле, даже если слово находиться в середине строки?
И еще: а если я ввожу, например, для поиска слово "mu", то строка, которая содержит слово "omut" тоже будет найдена, как подходящая?
Мой сайт - http://kimsite.wallst.ru

Оффлайн Ilya

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 108
  • +0/-0
  • 0
    • Просмотр профиля
    • www.svd.ru
Поиск по TXT-файлу perl-скриптом...
« Ответ #3 : 11 Апреля 2001, 09:20:12 »
Да, в масив будут помещены все строки из файла содержащие последовательность символов $search с учетом регистра.

Оффлайн LEO

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 5
  • +0/-0
  • 0
    • Просмотр профиля
    • http://kimsite.wallst.ru
Поиск по TXT-файлу perl-скриптом...
« Ответ #4 : 11 Апреля 2001, 11:17:12 »
Цитировать
ILYA (11-04-2001 09:20):
Да, в масив будут помещены все строки из файла содержащие последовательность символов $search с учетом регистра.

Спасибо.
Тогда последний вопрос: как разделить переменную $search на отдельные слова, если она содержить два и более слова?
Мой сайт - http://kimsite.wallst.ru

Оффлайн AliMamed

  • \\o/ ali akbar \\o/
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 2409
  • +2/-0
  • 2
    • Просмотр профиля
    • http://alimamed.pp.ru
Поиск по TXT-файлу perl-скриптом...
« Ответ #5 : 11 Апреля 2001, 12:32:41 »
@words = split(/\\s/, $search);
ну, будем исповедоваться?

Оффлайн Yaroslav

  • Фанат форума
  • Старожил
  • ****
  • Сообщений: 323
  • +0/-0
  • 0
    • Просмотр профиля
Поиск по TXT-файлу perl-скриптом...
« Ответ #6 : 29 Июня 2005, 15:21:03 »
Цитировать
Ilya:
Да, в масив будут помещены все строки из файла содержащие последовательность символов $search с учетом регистра.

судя по книге:
/i   # игнорировать реестр
судя по тестам - совсем наоборот.
так как же заставить его игнорировать регистр?
Никогда не бойся делать то, что ты не умеешь. Помни, ковчег был построен любителем. Профессионалы построили \"Титаник\".

Оффлайн Yaroslav

  • Фанат форума
  • Старожил
  • ****
  • Сообщений: 323
  • +0/-0
  • 0
    • Просмотр профиля
Поиск по TXT-файлу perl-скриптом...
« Ответ #7 : 29 Июня 2005, 15:31:25 »
чудесно, но небольшой ответ был как раз топиком ниже :)
неужели так будет правильней всего?

$search="сОлн";
$search=~tr/A-Z/a-z/; $search=~tr/А-Я/а-я/;

open (LIST,"$file");
while () {
  $_=~tr/A-Z/a-z/; $_=~tr/А-Я/а-я/;
  if (/$search/) { push @matches, $_; }    #тогда /i уже не надо
}
close (LIST);
Никогда не бойся делать то, что ты не умеешь. Помни, ковчег был построен любителем. Профессионалы построили \"Титаник\".

Оффлайн Ivan Kolesnikov

  • Завсегдатай
  • Новичок
  • *
  • Сообщений: 39
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Поиск по TXT-файлу perl-скриптом...
« Ответ #8 : 30 Июня 2005, 10:49:40 »
Цитировать

$search=~tr/A-Z/a-z/; $search=~tr/А-Я/а-я/;

Нет, так просто ужасно, а если ты захочешь переводить в другой регистр какой-нибудь другой язык, или просто сменишь кодировку, где буквы не идут подрят?
Лучше использовать

use locale;
$search=lc "сОлн";
open (LIST,"$file");
while ( ) {
  $_ = lc $_;
  if (/$search/) { push @matches, $_; }    #тогда /i уже не надо
}
close (LIST);


Это прагма указывает что для изменение регистра нужно использовать текущую локаль.

Это в том случае если нужно чтобы в результате было все в нижнем регисте, а если не нужно, то лучше использовать модификатор i. Тогда регистр сохранится :)
« Последнее редактирование: 30 Июня 2005, 10:57:27 от Ivan Kolesnikov »

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28