Forum Webscript.Ru
Программирование => Perl => Тема начата: AlterMann[RCK] от 08 Октября 2002, 12:13:31
-
Народ!!! я тута типа новый... :)
В общем у меня такой вопрос: я заморочился с проверкой на то, существует ли такое "слово" файле или ещё нет... Короче, мне нужно сделать так, если слово есть в файле (которое пришло из формы HTML), то выдавать сообщение по этому поводу, а если нет, то записывать его в этот файл...
Я такой код нарисовал, но что-то тута не то...:
open(SLOVA, "+ @vse=;
if(@vse=~/$izformi/i){print "Такое уже есть!";}
else{
#Запись в файл...
...
}
close(SLOVA);
Так вот, что тута не правильно в условии??? Скажите пожалуйста!!! Ато я пол ночи провозился... Теперь вот спать хочу! :)
Заранее благодарен
-
if(@vse=~/$izformi/i){print "Такое уже есть!";}
нужно проверять отдельные элементы массива, т.е. $vse[0], $vse[1],...,$vse[n]. тогда и получишь совпадение.
-
так, я вот ещё чё думаю, можно ли, файл (в котором каждое слово в новой сторочке), записать не в массив
@vse=
а в строчку?
$vse=
хотя это будет заморочка, ведь я щас опять надумал переделать условие в
if(@vse=~/^$izformi/i) ...
... а если и по элементам массива делать, то это ж цикле надо... так вот, как в Perl эт написать тогда? Так что ли?
while(EOF SLOVA)...
:) Вы уж по этому поводу подскажите, плиззз! :)
-
... а если и по элементам массива делать, то это ж цикле надо...
Есть прекрасная штука grep:
if (scalar(grep /^$izformi$/i, @vse))
{
print "Есть"
}
-
Есть прекрасная штука grep:
спасибо конечно! я вот домой вчера попал и попробовал... а нифига не получилось! :(
Уже и записывал файл в строку, а потому из неё делал массив... Элементы которого foreach-ем проверял на совпадение с тем словом, а нифига! :(
Мож кто-нибудь другие какие нить способы знает?
-
А можно кусочек [значимый] исходника? И пример файла, плиз.
Весь файл кидать не нужно ;)
-
Значит так, держите код того, что я в тоге состряпал, но всё-равно не работает! :)
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]-
усё... такой маленький файл! :)
а теперь ОООЧЕНЬ прошу, ПАМАГИТЕ!!!!! :)
-
Интересно и странно :)
Два раза копи-паст... И работает!
Сам алгоритм, похоже, верен, значит, ищи глюки не здесь.
P.S. Я проверял на своей локальной машине.
-
Кстати, если работать через grep, то нужно аккуратнее: квадратная скобка в $name может все испортить.
-
Да тута, млин! Я полюбому знаю! Тож проверял! Потому что если поставить условие с отрицанием, то по любому присваивается $id=2... и тогда выдаёт ошибку, о том, что такое уже есть, какой бы другой $name не был......
Так что условие полюбому какое то не правельное! Уже даже и не знаю что делать! Руки опускаются! :(
-
Про 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);
-
Гы!!! mike, ты зюпер хацкер! получилось!!! :) :) :)
Я щастлив!!!!!
спасибо огромное!!!! (:))