Автор Тема: Помогите с проверкой (регулярные выражения) Небольшой код прилагается...  (Прочитано 4504 раз)

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

Оффлайн AlterMann[RCK]

  • Завсегдатай
  • Новичок
  • *
  • Сообщений: 33
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.belnet.ru/altermann
Народ!!! я тута типа новый... :)
В общем у меня такой вопрос: я заморочился с проверкой на то, существует ли такое "слово" файле или ещё нет... Короче, мне нужно сделать так, если слово есть в файле (которое пришло из формы HTML), то выдавать сообщение по этому поводу, а если нет, то записывать его в этот файл...
Я такой код нарисовал, но что-то тута не то...:

open(SLOVA, "+  @vse=;
  if(@vse=~/$izformi/i){print "Такое уже есть!";}
  else{
    #Запись в файл...
    ...
  }
close(SLOVA);

Так вот, что тута не правильно в условии??? Скажите пожалуйста!!! Ато я пол ночи провозился... Теперь вот спать хочу! :)
Заранее благодарен
« Последнее редактирование: 08 Октября 2002, 12:33:27 от AlterMann[RCK] »
Русский язык без мата превращается в доклад!

Оффлайн USE

  • Любитель
  • Ветеран
  • *****
  • Сообщений: 720
  • +0/-0
  • 2
    • Просмотр профиля
Цитировать
if(@vse=~/$izformi/i){print "Такое уже есть!";}

нужно проверять отдельные элементы массива, т.е. $vse[0], $vse[1],...,$vse[n]. тогда и получишь совпадение.
Не ходите, дети, без «Мозиллы» дальше localhost!

Оффлайн AlterMann[RCK]

  • Завсегдатай
  • Новичок
  • *
  • Сообщений: 33
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.belnet.ru/altermann
так, я вот ещё чё думаю, можно ли, файл (в котором каждое слово в новой сторочке), записать не в массив
@vse=
а в строчку?
$vse=

хотя это будет заморочка, ведь я щас опять надумал переделать условие в
if(@vse=~/^$izformi/i) ...

... а если и по элементам массива делать, то это ж цикле надо... так вот, как в Perl эт написать тогда? Так что ли?
while(EOF SLOVA)...
:) Вы уж по этому поводу подскажите, плиззз! :)
Русский язык без мата превращается в доклад!

Оффлайн mike

  • ProPerl\'er
  • Старожил
  • ****
  • Сообщений: 435
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
Цитировать
... а если и по элементам массива делать, то это ж цикле надо...


Есть прекрасная штука grep:

if (scalar(grep /^$izformi$/i, @vse))
{
   print "Есть"
}
[ основной браузер когда-то был, теперь попробуй разберись =]

Оффлайн AlterMann[RCK]

  • Завсегдатай
  • Новичок
  • *
  • Сообщений: 33
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.belnet.ru/altermann
Цитировать
Есть прекрасная штука grep:

спасибо конечно! я вот домой вчера попал и попробовал... а нифига не получилось! :(
Уже и записывал файл в строку, а потому из неё делал массив... Элементы которого foreach-ем проверял на совпадение с тем словом, а нифига! :(

Мож кто-нибудь другие какие нить способы знает?
Русский язык без мата превращается в доклад!

Оффлайн mike

  • ProPerl\'er
  • Старожил
  • ****
  • Сообщений: 435
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
А можно кусочек [значимый] исходника? И пример файла, плиз.

Весь файл кидать не нужно ;)
[ основной браузер когда-то был, теперь попробуй разберись =]

Оффлайн AlterMann[RCK]

  • Завсегдатай
  • Новичок
  • *
  • Сообщений: 33
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.belnet.ru/altermann
Значит так, держите код того, что я в тоге состряпал, но всё-равно не работает! :)

   open(Ch,"+<$CHLENS");
     flock(Ch,2);
     @CHLENI=;
     foreach $zareg (@CHLENI){
        $id=2 if $zareg eq $name;}
        if($id!=2){
            unshift(@CHLENI,"$name\\n");
            seek(Ch,0,0);
            print Ch @CHLENI;
            truncate(Ch,tell(Ch));
            flock(Ch,8);
            }
    close(Ch);

эт только то, что не работает...
а теперь файл в котором "слова"

AlterMann[RCK]
-Tier[RCK]-

усё... такой маленький файл! :)
а теперь ОООЧЕНЬ прошу, ПАМАГИТЕ!!!!! :)
Русский язык без мата превращается в доклад!

Оффлайн mike

  • ProPerl\'er
  • Старожил
  • ****
  • Сообщений: 435
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
Интересно и странно :)

Два раза копи-паст... И работает!
Сам алгоритм, похоже, верен, значит, ищи глюки не здесь.

P.S. Я проверял на своей локальной машине.
[ основной браузер когда-то был, теперь попробуй разберись =]

Оффлайн mike

  • ProPerl\'er
  • Старожил
  • ****
  • Сообщений: 435
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
Кстати, если работать через grep, то нужно аккуратнее: квадратная скобка в $name может все испортить.
[ основной браузер когда-то был, теперь попробуй разберись =]

Оффлайн AlterMann[RCK]

  • Завсегдатай
  • Новичок
  • *
  • Сообщений: 33
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.belnet.ru/altermann
Да тута, млин! Я полюбому знаю! Тож проверял! Потому что если поставить условие с отрицанием, то по любому присваивается $id=2... и тогда выдаёт ошибку, о том, что такое уже есть, какой бы другой $name не был......
Так что условие полюбому какое то не правельное! Уже даже и не знаю что делать! Руки опускаются! :(
Русский язык без мата превращается в доклад!

Оффлайн mike

  • ProPerl\'er
  • Старожил
  • ****
  • Сообщений: 435
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
Про chomp забыли :)


open
(Ch,"+<$CHLENS");
flock(Ch,2);
@
CHLENI=<Ch>;
if(
not scalar grep chomp$_ eq $name } @CHLENI){
unshift(@CHLENI,"$name");
seek(Ch,0,0);
$, = 
"\\n";
print 
Ch @CHLENI;
truncate(Ch,tell(Ch));
}
flock(Ch,8);
close(Ch);
[ основной браузер когда-то был, теперь попробуй разберись =]

Оффлайн AlterMann[RCK]

  • Завсегдатай
  • Новичок
  • *
  • Сообщений: 33
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.belnet.ru/altermann
Гы!!! mike, ты зюпер хацкер! получилось!!! :) :) :)
Я щастлив!!!!!
спасибо огромное!!!! (:))
Русский язык без мата превращается в доклад!

 

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