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

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

Опубликовано

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

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

$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;

}

Опубликовано

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 эмодзи.

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

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

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

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