Nick_F Опубликовано 19 июня, 2005 Жалоба Поделиться Опубликовано 19 июня, 2005 Необходимо органидовать поиск в массиве (содержит строки некоего файла) по образцу, вводимому с клавиатуры. Нижеприведенный вариант не дает никаких результатов. $search = <STDIN>; $c = -1; foreach $temp (@html) { ++$c; print "$c - $temp\n" if $temp =~ m/$search/g; } Есть ли другие варианты? Или что я упускаю в параметрах? Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Ineu Опубликовано 19 июня, 2005 Жалоба Поделиться Опубликовано 19 июня, 2005 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 Автор Жалоба Поделиться Опубликовано 20 июня, 2005 Спасибо! Попробую. В литературе, что у меня есть этот вопрос освещен довольно туманно. Что именно делает эта строка? $search =~ s/\n//; Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Ineu Опубликовано 20 июня, 2005 Жалоба Поделиться Опубликовано 20 июня, 2005 Nick_F писал(а) пн, 20 июня 2005 23:17 Спасибо! Попробую. В литературе, что у меня есть этот вопрос освещен довольно туманно. Что именно делает эта строка? $search =~ s/\n//; $search = <STDIN> - вводит данные _с_ символом перевода строки - \n. @html (если, конечно, ее формировать нормальным образом ) содержит строки _без_ символа перевода строки. Поэтому сравнение $search со строками оттуда _всегда_ будет давать false: строка из @html == some_string введенная строка == str\n (или даже ing\n - все равно не будет работать ) потому надо символ перевода строки удалить. В данном случае он просто заменяется на пустую строку, что, в принципе, то же самое, что удаление ЗЫ: Вообще-то для этих целей существует специальная функция, и ее и рекомендуется употреблять, но я ее не помню . Посмотрите man perlfunc, раздел Строковые Функции Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Nick_F Опубликовано 21 июня, 2005 Автор Жалоба Поделиться Опубликовано 21 июня, 2005 Спасибо! Все работает. Про символ новой строки я совершенно не подумал. Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Nick_F Опубликовано 22 июня, 2005 Автор Жалоба Поделиться Опубликовано 22 июня, 2005 chomp ($name); - функция удаления из строки последнего символа "\n"! Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Nick_F Опубликовано 6 июля, 2005 Автор Жалоба Поделиться Опубликовано 6 июля, 2005 Небольшая загвоздка: при попытке организовать поиск по строке, состоящей из слова на русском языке, программа отказывается работать. Т.е. не возвращает никакого результата. Возможно требуются некоторые преобразование строки или выражения поиска? Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Ineu Опубликовано 6 июля, 2005 Жалоба Поделиться Опубликовано 6 июля, 2005 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 - линух У меня выводит... Может, она работает, просто строки действительно не совпадают? В разных кодировках, например. Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Nick_F Опубликовано 7 июля, 2005 Автор Жалоба Поделиться Опубликовано 7 июля, 2005 Совершенно верно, кодировки различные, но строку предварительно переводил, пробовал конвертировать и файл. Ладно, проведу совершенно чистый эксперимент, создам специально файл в заведомо верной кодировке. Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.