The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



"Почему НЕ всегда срабатывает поиск подстроки?"
Вариант для распечатки  
Пред. тема | След. тема 
Форум Программирование под UNIX (Perl)
Изначальное сообщение [ Отслеживать ]

"Почему НЕ всегда срабатывает поиск подстроки?"  +/
Сообщение от Владимирemail (??), 11-Авг-20, 10:05 
Написал скрипт по поиску дублирующих ссылок в двух htm файлах - берется ссылка из первого файла и ищется во втором эта найденная в первом.
Если не находится, то в результирующий файл записывается строка из первого файла из которой выделена искомая подстрока.
По задумке в выходном файле должны остаться только те строки из первого файла, которые содержат ссылки отсутствующие во втором файле.
На практике же результат получился частичный - да часть отсеивается, но есть повторяющиеся.
И я не могу понять почему это происходит. Я сравнивал эти оставшиеся строки с помощью текстового редактора (Far) - строки идентичны, а m// не находит их во втором файле.

Вот мой скрипт:
my $NameFile = shift @ARGV;
open (FH, "<$NameFile") or die ("Cannot open file \"$NameFile\"");
my @array=<FH>;
close FH;

$NameFile = shift @ARGV;
open (FH, "<$NameFile") or die ("Cannot open file \"$NameFile\"");
my @array2=<FH>;
close FH;

open (OUT, ">Test.tmp") or die ("Cannot open file Test.tmp");

my ($m,$n,$f)=0;
my $p;
foreach my $r (@array) {
  if($r=~/href="(.+?)"/)#ищем строку, содержащую ссылку
  {
    $m++;
    $p=$1;
    print "$p\n";
    $f=0;
    foreach (@array2)#ищем строку, содержащую ранее найденную ссылку
    {
      if(/$p/) {print "$_\n"; $f=1;}
    }
    if($f==0)#если нет дублирующих ссылок
    {
      print OUT $r;
      $n++;
    }
  }
}

close OUT;
print "\nВсего ссылок в первом файле = $m, из них отсутствующих во втором файле = $n";

Подскажите, пожалуйста, что я не так сделал.

Ответить | Правка | Cообщить модератору

Оглавление

Сообщения [Сортировка по времени | RSS]


1. "Почему НЕ всегда срабатывает поиск подстроки?"  +/
Сообщение от ss (??), 11-Авг-20, 11:29 
>[оверквотинг удален]
>     {
>       print OUT $r;
>       $n++;
>     }
>   }
> }
> close OUT;
> print "\nВсего ссылок в первом файле = $m, из них отсутствующих во
> втором файле = $n";
> Подскажите, пожалуйста, что я не так сделал.

покажите исходные файлы со строками и результат

Ответить | Правка | Наверх | Cообщить модератору

4. "Почему НЕ всегда срабатывает поиск подстроки?"  +/
Сообщение от Владимирemail (??), 11-Авг-20, 13:35 
>[оверквотинг удален]
>>       print OUT $r;
>>       $n++;
>>     }
>>   }
>> }
>> close OUT;
>> print "\nВсего ссылок в первом файле = $m, из них отсутствующих во
>> втором файле = $n";
>> Подскажите, пожалуйста, что я не так сделал.
> покажите исходные файлы со строками и результат

<LI><A href="https://www.youtube.com/watch?v=2Rf01iJGS2g">TFT SPI 128*160</A>
<LI><A href="http://compcar.ru/forum/showthread.php?t=6064">Видеокарта для Arduino (arduinoVideioCard).</A>
<LI><A href="http://avr-start.ru/?p=3983">Управление симистором. Еще раз про таймеры. | AVR-START.RU</A>
<LI><A href="https://www.youtube.com/watch?v=12rcdJKSGFc">Как устроен Python? > Детальный разбор</A>

Вот эти строки содержатся в обоих файлах - они идентичны и именно эти строки не обрабатываются моим скриптом, во всяком случае, так как мне нужно.
Я предполагаю, что это из-за содержимого самих строк, а конкретно в чем проблема не знаю.

Ответить | Правка | Наверх | Cообщить модератору

2. "Почему НЕ всегда срабатывает поиск подстроки?"  +/
Сообщение от ss (??), 11-Авг-20, 12:40 
>[оверквотинг удален]
>     {
>       print OUT $r;
>       $n++;
>     }
>   }
> }
> close OUT;
> print "\nВсего ссылок в первом файле = $m, из них отсутствующих во
> втором файле = $n";
> Подскажите, пожалуйста, что я не так сделал.

возможно это ссылки содержащие в себе вопросительный знак

Ответить | Правка | Наверх | Cообщить модератору

5. "Почему НЕ всегда срабатывает поиск подстроки?"  +/
Сообщение от Владимирemail (??), 11-Авг-20, 13:43 
>[оверквотинг удален]
>>       print OUT $r;
>>       $n++;
>>     }
>>   }
>> }
>> close OUT;
>> print "\nВсего ссылок в первом файле = $m, из них отсутствующих во
>> втором файле = $n";
>> Подскажите, пожалуйста, что я не так сделал.
> возможно это ссылки содержащие в себе вопросительный знак

Да, в теле этих ссылок содержится вопросительный знак.
И как это обойти?

Ответить | Правка | Наверх | Cообщить модератору

3. "Почему НЕ всегда срабатывает поиск подстроки?"  +/
Сообщение от Аноним (3), 11-Авг-20, 12:40 
>  if(/$p/)

а перл нормально к таким подстановкам относится? В смысле спецсимволы дополнительно экранировать не надо?

и если про поиск, то почему не выбрать все ссылки из файлов сразу, а потом сравнивать два массива?

Ответить | Правка | Наверх | Cообщить модератору

6. "Почему НЕ всегда срабатывает поиск подстроки?"  +/
Сообщение от Владимирemail (??), 11-Авг-20, 13:51 
>>  if(/$p/)
> а перл нормально к таким подстановкам относится? В смысле спецсимволы дополнительно экранировать
> не надо?

Скорее всего в этом и проблема, но как эту ситуацию обработать я не знаю.

> и если про поиск, то почему не выбрать все ссылки из файлов
> сразу, а потом сравнивать два массива?

Не вижу в этом смысла.

Ответить | Правка | Наверх | Cообщить модератору

7. "Почему НЕ всегда срабатывает поиск подстроки?"  +/
Сообщение от Аноним (3), 11-Авг-20, 14:00 
> но как эту ситуацию обработать я не знаю.

наверно так

m/\Q$p/

> Не вижу в этом смысла.

ну да, простое сравнение строк не идет ни в какой сравнение с интерполированным регекспом :)
особенно когда на самом деле там нет регекспа как такового, а производится поиск по строке

Ответить | Правка | Наверх | Cообщить модератору

8. "Почему НЕ всегда срабатывает поиск подстроки?"  +/
Сообщение от Владимирemail (??), 11-Авг-20, 14:13 
>> но как эту ситуацию обработать я не знаю.
> наверно так
>
m/\Q$p/

Сработало! Спасибо большое!

Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру