Nick_F Posted June 19, 2005 Report Share Posted June 19, 2005 Необходимо органидовать поиск в массиве (содержит строки некоего файла) по образцу, вводимому с клавиатуры. Нижеприведенный вариант не дает никаких результатов. $search = <STDIN>; $c = -1; foreach $temp (@html) { ++$c; print "$c - $temp\n" if $temp =~ m/$search/g; } Есть ли другие варианты? Или что я упускаю в параметрах? Quote Link to comment Share on other sites More sharing options...
Ineu Posted June 19, 2005 Report Share Posted June 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; } Quote Link to comment Share on other sites More sharing options...
Nick_F Posted June 20, 2005 Author Report Share Posted June 20, 2005 Спасибо! Попробую. В литературе, что у меня есть этот вопрос освещен довольно туманно. Что именно делает эта строка? $search =~ s/\n//; Quote Link to comment Share on other sites More sharing options...
Ineu Posted June 20, 2005 Report Share Posted June 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, раздел Строковые Функции Quote Link to comment Share on other sites More sharing options...
Nick_F Posted June 21, 2005 Author Report Share Posted June 21, 2005 Спасибо! Все работает. Про символ новой строки я совершенно не подумал. Quote Link to comment Share on other sites More sharing options...
Nick_F Posted June 22, 2005 Author Report Share Posted June 22, 2005 chomp ($name); - функция удаления из строки последнего символа "\n"! Quote Link to comment Share on other sites More sharing options...
Nick_F Posted July 6, 2005 Author Report Share Posted July 6, 2005 Небольшая загвоздка: при попытке организовать поиск по строке, состоящей из слова на русском языке, программа отказывается работать. Т.е. не возвращает никакого результата. Возможно требуются некоторые преобразование строки или выражения поиска? Quote Link to comment Share on other sites More sharing options...
Ineu Posted July 6, 2005 Report Share Posted July 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 - линух У меня выводит... Может, она работает, просто строки действительно не совпадают? В разных кодировках, например. Quote Link to comment Share on other sites More sharing options...
Nick_F Posted July 7, 2005 Author Report Share Posted July 7, 2005 Совершенно верно, кодировки различные, но строку предварительно переводил, пробовал конвертировать и файл. Ладно, проведу совершенно чистый эксперимент, создам специально файл в заведомо верной кодировке. Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.