Jump to content

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


Recommended Posts

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

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

$search = <STDIN>;

$c = -1;

foreach $temp (@html) {

++$c;

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

}

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

Link to comment
Share on other sites

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;

}

Link to comment
Share on other sites

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, раздел Строковые Функции

Link to comment
Share on other sites

  • 2 weeks later...

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

Link to comment
Share on other sites

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 - линух

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

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

Link to comment
Share on other sites

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

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...