Перейти к содержанию

Поиск по содержимому файла


Рекомендуемые сообщения

Необходимо органидовать поиск в массиве (содержит строки некоего файла) по образцу, вводимому с клавиатуры.

Нижеприведенный вариант не дает никаких результатов.

$search = <STDIN>;

$c = -1;

foreach $temp (@html) {

++$c;

print "$c - $temp\n" if $temp =~ m/$search/g;

}

Есть ли другие варианты? Или что я упускаю в параметрах?

Ссылка на комментарий
Поделиться на другие сайты

Nick_F писал(а) вс, 19 июня 2005 22:14

Необходимо органидовать поиск в массиве (содержит строки некоего файла) по образцу, вводимому с клавиатуры.

$search = <STDIN>;

$c = -1;

$search =~ s/\n//;

foreach $temp (@html) {

++$c;

print "$c - $temp\n" if $temp =~ m/$search/g;

}

Ссылка на комментарий
Поделиться на другие сайты

Спасибо! Попробую. В литературе, что у меня есть этот вопрос освещен довольно туманно.

Что именно делает эта строка? $search =~ s/\n//;

Ссылка на комментарий
Поделиться на другие сайты

Nick_F писал(а) пн, 20 июня 2005 23:17

Спасибо! Попробую. В литературе, что у меня есть этот вопрос освещен довольно туманно.

Что именно делает эта строка? $search =~ s/\n//;

$search = <STDIN> - вводит данные _с_ символом перевода строки - \n. @html (если, конечно, ее формировать нормальным образом Smile) содержит строки _без_ символа перевода строки. Поэтому сравнение $search со строками оттуда _всегда_ будет давать false:

строка из @html == some_string

введенная строка == str\n (или даже ing\n - все равно не будет работать Smile)

потому надо символ перевода строки удалить. В данном случае он просто заменяется на пустую строку, что, в принципе, то же самое, что удаление Smile

ЗЫ: Вообще-то для этих целей существует специальная функция, и ее и рекомендуется употреблять, но я ее не помню Smile. Посмотрите man perlfunc, раздел Строковые Функции

Ссылка на комментарий
Поделиться на другие сайты

  • 2 недели спустя...

Небольшая загвоздка: при попытке организовать поиск по строке, состоящей из слова на русском языке, программа отказывается работать. Т.е. не возвращает никакого результата. Возможно требуются некоторые преобразование строки или выражения поиска?

Ссылка на комментарий
Поделиться на другие сайты

bash-3.00$ cat 1.pl

#!/usr/bin/perl

$search = <STDIN>;

$c = -1;

$search =~ s/\n//;

@html = ("asd", "bsd", "csd", "линух");

for $temp (@html)

{

$c++;

print "$c - $temp\n" if $temp =~ m/$search/g;

}

bash-3.00$ ./1.pl

ну

3 - линух

У меня выводит...

Может, она работает, просто строки действительно не совпадают? В разных кодировках, например.

Ссылка на комментарий
Поделиться на другие сайты

Совершенно верно, кодировки различные, но строку предварительно переводил, пробовал конвертировать и файл. Ладно, проведу совершенно чистый эксперимент, создам специально файл в заведомо верной кодировке.

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
×
×
  • Создать...