Автор Тема: Подскажите в чем может быть ошибка!  (Прочитано 4065 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Energizer

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 23
  • +0/-0
  • 0
    • Просмотр профиля
    • http://kondrmed.ru
Люди помогите, я весь вечер сижу и никак не могу понять в чем может быть ошибка.... Я сделал простой поиск по файлу, следующего содержания
12345=слово, сам скрипт следующий

$words - слово вводимое пользователем
$keywords - слово в базе

и так

### search on base
open(FILE, "$catalog") || die "Can\'t read $catalog. $!";
flock(FILE, $LOCK_EX);
$findcount=0;
while(!eof(FILE))
{
chomp($catalogword=);
($id,$keywords) = split(/\\=/,$catalogword);

if($keywords=~/$words/)
{
$findcoun++;
push(@SearchFile,$show);
$IdProduct{$show}=$id;
$WordProduct{$show}=$keywords;
}
}
flock(FILE, $LOCK_UN);
close(FILE);

print "Найдено: $findcoun
\\n";
foreach $show(@SearchFile)
{
print "номер - $IdProduct{$show}
\\n";
print "слова - $WordProduct{$show}

\\n";
}

почему то, если есть в базе похожие слова, он выводит правильное кол-во... но сам результат повторяет последним найденым словом, столько раз сколько найдено в базе... ну что то типа

1234=вася, коля, сева
2345=маша, даша
2345=вася, дима

вводим слово вася.... что имеем

он выводит что найдено слово вася 2 раза и показывает

слово=вася, дима 2 раза..... почему?

подскажите...please...

Оффлайн ESE

  • Фанат
  • Постоялец
  • ***
  • Сообщений: 172
  • +0/-0
  • 2
    • Просмотр профиля
    • http://comp.hobi.ru
Подскажите в чем может быть ошибка!
« Ответ #1 : 18 Июля 2002, 12:35:54 »
непонятно что такое $show

посмотри, может мой код подойдет
#!/usr/bin/perl
$query="слова поиска";
$query=~s/\\s+/ /g;
$query=~s/[\\\\\\$\\^\\*\\(\\)\\+\\?\\.]//g;
$t_query=$query;
$t_query=~s/ //g;
$findcoun=0;
if (!$t_query){&rez_search;exit}
$query=~ tr/\\xC0-\\xDF/\\xE0-\\xFF/;
$query=~tr/A-Z/a-z/;
$mode=1;#1-ищем любое слово 2-все слова
@querys=split(/ /,$query);
$len_querys=@querys;
open C,"test.txt";#где ищем
while (){
$dd_data=$_;
@f_data=split(/\\=/);
$q_string="$f_data[1]";
$q_string=~tr/A-Z/a-z/;
$q_string=~ tr/\\xC0-\\xDF/\\xE0-\\xFF/;
$h=0;
foreach $query(@querys){
if ($q_string=~/$query/){$h++;}}
if ($mode==1 and $h>0){$q_data="$q_data$dd_data";$findcoun++}
elsif ($mode<=>1 and $h==$len_querys){$q_data="$q_data$dd_data";$findcoun++}
}close C;&rez_search;
###############
sub rez_search{
print "Найдено - $findcoun\\n";
@q_data=split/\\n/,$q_data;
foreach $q_data(@q_data){
@rez=split(/\\=/,$q_data);
print "номер: $rez[0]- слово: $rez[1]\\n"}}
У програмиста две руки: левая и !левая
welcome

Оффлайн Energizer

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 23
  • +0/-0
  • 0
    • Просмотр профиля
    • http://kondrmed.ru
Подскажите в чем может быть ошибка!
« Ответ #2 : 18 Июля 2002, 15:03:16 »
$show определяет значение в массиве @SearchFile.....

Спасибо, сейчас посмотрю.....

Оффлайн ESE

  • Фанат
  • Постоялец
  • ***
  • Сообщений: 172
  • +0/-0
  • 2
    • Просмотр профиля
    • http://comp.hobi.ru
Подскажите в чем может быть ошибка!
« Ответ #3 : 18 Июля 2002, 15:33:14 »
Нет, это понятно..... Но ведь в коде $show не принимает никаких значений.........
У програмиста две руки: левая и !левая
welcome

Оффлайн Energizer

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 23
  • +0/-0
  • 0
    • Просмотр профиля
    • http://kondrmed.ru
Подскажите в чем может быть ошибка!
« Ответ #4 : 19 Июля 2002, 13:47:57 »
ESE, спасибо тебе... у меня все получилось.....

даже не знаю как тебя благодарить...... я рад что есть еще такие ребята ;)

Оффлайн Energizer

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 23
  • +0/-0
  • 0
    • Просмотр профиля
    • http://kondrmed.ru
Подскажите в чем может быть ошибка!
« Ответ #5 : 19 Июля 2002, 13:50:23 »
открываем новый массив  -> push(@SearchFile,$show); $show мы используем как значение, которое будет определять у нас $id и $keywords!

Оффлайн ESE

  • Фанат
  • Постоялец
  • ***
  • Сообщений: 172
  • +0/-0
  • 2
    • Просмотр профиля
    • http://comp.hobi.ru
Подскажите в чем может быть ошибка!
« Ответ #6 : 20 Июля 2002, 11:19:30 »
Цитировать
push(@SearchFile,$show);

перевожу как запихнуть переменную show в массив SearchFile
но, опять говорю что она у тебя пустая!
Не прав? Поправь
У програмиста две руки: левая и !левая
welcome

Оффлайн Energizer

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 23
  • +0/-0
  • 0
    • Просмотр профиля
    • http://kondrmed.ru
Подскажите в чем может быть ошибка!
« Ответ #7 : 22 Июля 2002, 17:56:16 »
окей, спасибо....

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28