Forum Webscript.Ru

Программирование => Perl => Тема начата: AlterMann[RCK] от 08 Октября 2002, 12:13:31

Название: Помогите с проверкой (регулярные выражения) Небольшой код прилагается...
Отправлено: AlterMann[RCK] от 08 Октября 2002, 12:13:31
Народ!!! я тута типа новый... :)
В общем у меня такой вопрос: я заморочился с проверкой на то, существует ли такое "слово" файле или ещё нет... Короче, мне нужно сделать так, если слово есть в файле (которое пришло из формы HTML), то выдавать сообщение по этому поводу, а если нет, то записывать его в этот файл...
Я такой код нарисовал, но что-то тута не то...:

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

Так вот, что тута не правильно в условии??? Скажите пожалуйста!!! Ато я пол ночи провозился... Теперь вот спать хочу! :)
Заранее благодарен
Название: Помогите с проверкой (регулярные выражения) Небольшой код прилагается...
Отправлено: USE от 08 Октября 2002, 12:39:58
Цитировать
if(@vse=~/$izformi/i){print "Такое уже есть!";}

нужно проверять отдельные элементы массива, т.е. $vse[0], $vse[1],...,$vse[n]. тогда и получишь совпадение.
Название: Помогите с проверкой (регулярные выражения) Небольшой код прилагается...
Отправлено: AlterMann[RCK] от 08 Октября 2002, 12:48:17
так, я вот ещё чё думаю, можно ли, файл (в котором каждое слово в новой сторочке), записать не в массив
@vse=
а в строчку?
$vse=

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

... а если и по элементам массива делать, то это ж цикле надо... так вот, как в Perl эт написать тогда? Так что ли?
while(EOF SLOVA)...
:) Вы уж по этому поводу подскажите, плиззз! :)
Название: Помогите с проверкой (регулярные выражения) Небольшой код прилагается...
Отправлено: mike от 08 Октября 2002, 13:12:40
Цитировать
... а если и по элементам массива делать, то это ж цикле надо...


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

if (scalar(grep /^$izformi$/i, @vse))
{
   print "Есть"
}
Название: Помогите с проверкой (регулярные выражения) Небольшой код прилагается...
Отправлено: AlterMann[RCK] от 09 Октября 2002, 10:41:31
Цитировать
Есть прекрасная штука grep:

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

Мож кто-нибудь другие какие нить способы знает?
Название: Помогите с проверкой (регулярные выражения) Небольшой код прилагается...
Отправлено: mike от 09 Октября 2002, 11:22:12
А можно кусочек [значимый] исходника? И пример файла, плиз.

Весь файл кидать не нужно ;)
Название: Помогите с проверкой (регулярные выражения) Небольшой код прилагается...
Отправлено: AlterMann[RCK] от 09 Октября 2002, 23:46:58
Значит так, держите код того, что я в тоге состряпал, но всё-равно не работает! :)

   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 от 10 Октября 2002, 11:01:50
Интересно и странно :)

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

P.S. Я проверял на своей локальной машине.
Название: Помогите с проверкой (регулярные выражения) Небольшой код прилагается...
Отправлено: mike от 10 Октября 2002, 11:19:02
Кстати, если работать через grep, то нужно аккуратнее: квадратная скобка в $name может все испортить.
Название: Помогите с проверкой (регулярные выражения) Небольшой код прилагается...
Отправлено: AlterMann[RCK] от 10 Октября 2002, 11:48:56
Да тута, млин! Я полюбому знаю! Тож проверял! Потому что если поставить условие с отрицанием, то по любому присваивается $id=2... и тогда выдаёт ошибку, о том, что такое уже есть, какой бы другой $name не был......
Так что условие полюбому какое то не правельное! Уже даже и не знаю что делать! Руки опускаются! :(
Название: Помогите с проверкой (регулярные выражения) Небольшой код прилагается...
Отправлено: mike от 10 Октября 2002, 12:11:28
Про chomp забыли :)


open(Ch,"+<$CHLENS");
flock(Ch,2);
@CHLENI=;
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] от 10 Октября 2002, 22:35:02
Гы!!! mike, ты зюпер хацкер! получилось!!! :) :) :)
Я щастлив!!!!!
спасибо огромное!!!! (:))