Forum Webscript.Ru

Программирование => Perl => Тема начата: Yaroslav от 18 Июля 2003, 01:38:50

Название: если строка не найдена
Отправлено: Yaroslav от 18 Июля 2003, 01:38:50
посоветуйте пожалуйста как сделать:

open (FILE,"file.txt");  #список email построчно
если в этом файле нет xxx-email, тогда добавляем его

а то у меня вариант крутится какой то неудобный, через for это сделать, но каэется что будет это через ж....
Название: если строка не найдена
Отправлено: Chs от 18 Июля 2003, 09:45:21
Дык два варианта - либо через for, либо весь файл в массив считывать.
Название: если строка не найдена
Отправлено: Wyclef от 18 Июля 2003, 10:32:11
Можно в переменную считать ($/=undef) и регекспом чекить.
Название: если строка не найдена
Отправлено: Yaroslav от 18 Июля 2003, 11:20:42
Цитировать
Chs:
Дык два варианта - либо через for, либо весь файл в массив считывать.

так как я представил, то вроде как и получается через ж....
или все таки это будет оптимально:
for ($i=0;$i=@file;$i++;) {
if ($file[$i] eq "нужный мыло") { $a=1; }
}
if ($a ne "1") { печатать в файл мыло }

Цитировать
Wyclef:
Можно в переменную считать ($/=undef) и регекспом чекить.
???
Название: если строка не найдена
Отправлено: n0name от 18 Июля 2003, 11:50:27
Если все в одну строку, то и regexp не нужен:
if(!index($all_emails_in_one_str,$check_email)){add_email($check_email);}
Название: если строка не найдена
Отправлено: Wyclef от 18 Июля 2003, 12:10:24
Yaroslav
open F, ...
$/ = undef;
$file = ; #все содержимое файла в переменной


туда, же, может пригодится...
while () {
$exist++ if $_ eq "новое мыло";
last if $exist;
}

unless ($exist) {
#добавляем мыло
}


n0name
Угу, TMTOWTDI... ;)
Название: если строка не найдена
Отправлено: Yaroslav от 18 Июля 2003, 14:49:36
Цитировать
Wyclef:
Wyclef

посмотрел чуток, поковырял и пришел вот к этому:
open (FILE, "nmail.txt");
while () {
   chomp ($_);
   if ($_ eq "$mail") { $i=1; exit; }
}

if ($i<1) {
open (FILE, ">>nmail.txt");
print FILE "$mail\\n";
}

что скажите?
Название: если строка не найдена
Отправлено: Wyclef от 18 Июля 2003, 15:03:31
Убрал лишнее:
open (FILE, "nmail.txt");
while () {
chomp;
exit if $_ eq $mail;
}

open (FILE, ">>nmail.txt");
print FILE "$mail\\n";
Название: если строка не найдена
Отправлено: Yaroslav от 18 Июля 2003, 16:44:57
Цитировать
Wyclef:
Убрал лишнее:

спасибо. где ты такой синтаксис нашел? у меня в книге только "exit;" "if ($_ eq "$mail")" "chomp ($_);"

мдя....
только я не учел что в таком случае будет останавливатся весь скрипт, а мне надо что б он продалжал работу
Название: если строка не найдена
Отправлено: Wyclef от 18 Июля 2003, 19:41:17
Цитировать
спасибо. где ты такой синтаксис нашел?

Всегда пожалуйста. Из личного опыта ;)
Цитировать
будет останавливатся весь скрипт, а мне надо что б он продалжал работу

Используй варинт с переменной, выше...
Название: если строка не найдена
Отправлено: Yaroslav от 22 Июля 2003, 16:20:06
получилось вот так и работает :))
open (FILE, "$tmails");
NMAIL:   while () {
if ($_ eq $line[8]) { $n=1; last NMAIL; } }
if ($n<1) {
open (FILE, ">>nmail.txt");
print FILE "$line[8]\\n"; }
Название: если строка не найдена
Отправлено: Wyclef от 22 Июля 2003, 18:55:22
1. Нафиг тебе метки NMAIL - достаточно просто last оставить;
2. Ну и запишешь ты в файл nmail.txt 10 одинаковых строк при 10-ти вызовах. Или так и надо?
Название: если строка не найдена
Отправлено: Yaroslav от 22 Июля 2003, 23:04:09
Цитировать
Wyclef:
1. Нафиг тебе метки NMAIL - достаточно просто last оставить;
с last у меня не работало
Цитировать
Wyclef:
2. Ну и запишешь ты в файл nmail.txt 10 одинаковых строк при 10-ти вызовах. Или так и надо?

гогда запишу? тот код что был последним не записывает если есть одинаковая строчка
Название: если строка не найдена
Отправлено: Wyclef от 22 Июля 2003, 23:16:37
Цитировать
тот код что был последним не записывает если есть одинаковая строчка


Понял, просто у тебя сначала написано:
open (FILE, "$tmails");
а потом:
open (FILE, ">>nmail.txt");
Я подумал ты с разными файлами работаешь, а на самом деле с одним...