Автор Тема: если строка не найдена  (Прочитано 4781 раз)

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

Оффлайн Yaroslav

  • Фанат форума
  • Старожил
  • ****
  • Сообщений: 323
  • +0/-0
  • 0
    • Просмотр профиля
если строка не найдена
« : 18 Июля 2003, 01:38:50 »
посоветуйте пожалуйста как сделать:

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

а то у меня вариант крутится какой то неудобный, через for это сделать, но каэется что будет это через ж....
Никогда не бойся делать то, что ты не умеешь. Помни, ковчег был построен любителем. Профессионалы построили \"Титаник\".

Оффлайн Chs

  • Perl программер
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 1108
  • +0/-0
  • 2
    • Просмотр профиля
    • http://chs.now.at/
если строка не найдена
« Ответ #1 : 18 Июля 2003, 09:45:21 »
Дык два варианта - либо через for, либо весь файл в массив считывать.
2B OR NOT 2B = FF

Оффлайн Wyclef

  • hello_worlder
  • Старожил
  • ****
  • Сообщений: 307
  • +0/-0
  • 2
    • Просмотр профиля
    • http://thug.narod.ru
если строка не найдена
« Ответ #2 : 18 Июля 2003, 10:32:11 »
Можно в переменную считать ($/=undef) и регекспом чекить.
It\'s nice to be important, but it\'s more important to be nice!

Оффлайн Yaroslav

  • Фанат форума
  • Старожил
  • ****
  • Сообщений: 323
  • +0/-0
  • 0
    • Просмотр профиля
если строка не найдена
« Ответ #3 : 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

  • Завсегдатай
  • Новичок
  • *
  • Сообщений: 42
  • +0/-0
  • 0
    • Просмотр профиля
если строка не найдена
« Ответ #4 : 18 Июля 2003, 11:50:27 »
Если все в одну строку, то и regexp не нужен:
if(!index($all_emails_in_one_str,$check_email)){add_email($check_email);}
Да кому она нужна?!...

Оффлайн Wyclef

  • hello_worlder
  • Старожил
  • ****
  • Сообщений: 307
  • +0/-0
  • 2
    • Просмотр профиля
    • http://thug.narod.ru
если строка не найдена
« Ответ #5 : 18 Июля 2003, 12:10:24 »
Yaroslav
open F, ...
$/ = undef;
$file = ; #все содержимое файла в переменной


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

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


n0name
Угу, TMTOWTDI... ;)
« Последнее редактирование: 18 Июля 2003, 12:19:56 от Wyclef »
It\'s nice to be important, but it\'s more important to be nice!

Оффлайн Yaroslav

  • Фанат форума
  • Старожил
  • ****
  • Сообщений: 323
  • +0/-0
  • 0
    • Просмотр профиля
если строка не найдена
« Ответ #6 : 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

  • hello_worlder
  • Старожил
  • ****
  • Сообщений: 307
  • +0/-0
  • 2
    • Просмотр профиля
    • http://thug.narod.ru
если строка не найдена
« Ответ #7 : 18 Июля 2003, 15:03:31 »
Убрал лишнее:
open (FILE, "nmail.txt");
while () {
chomp;
exit if $_ eq $mail;
}

open (FILE, ">>nmail.txt");
print FILE "$mail\\n";
« Последнее редактирование: 18 Июля 2003, 15:14:08 от Wyclef »
It\'s nice to be important, but it\'s more important to be nice!

Оффлайн Yaroslav

  • Фанат форума
  • Старожил
  • ****
  • Сообщений: 323
  • +0/-0
  • 0
    • Просмотр профиля
если строка не найдена
« Ответ #8 : 18 Июля 2003, 16:44:57 »
Цитировать
Wyclef:
Убрал лишнее:

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

мдя....
только я не учел что в таком случае будет останавливатся весь скрипт, а мне надо что б он продалжал работу
Никогда не бойся делать то, что ты не умеешь. Помни, ковчег был построен любителем. Профессионалы построили \"Титаник\".

Оффлайн Wyclef

  • hello_worlder
  • Старожил
  • ****
  • Сообщений: 307
  • +0/-0
  • 2
    • Просмотр профиля
    • http://thug.narod.ru
если строка не найдена
« Ответ #9 : 18 Июля 2003, 19:41:17 »
Цитировать
спасибо. где ты такой синтаксис нашел?

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

Используй варинт с переменной, выше...
It\'s nice to be important, but it\'s more important to be nice!

Оффлайн Yaroslav

  • Фанат форума
  • Старожил
  • ****
  • Сообщений: 323
  • +0/-0
  • 0
    • Просмотр профиля
если строка не найдена
« Ответ #10 : 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

  • hello_worlder
  • Старожил
  • ****
  • Сообщений: 307
  • +0/-0
  • 2
    • Просмотр профиля
    • http://thug.narod.ru
если строка не найдена
« Ответ #11 : 22 Июля 2003, 18:55:22 »
1. Нафиг тебе метки NMAIL - достаточно просто last оставить;
2. Ну и запишешь ты в файл nmail.txt 10 одинаковых строк при 10-ти вызовах. Или так и надо?
It\'s nice to be important, but it\'s more important to be nice!

Оффлайн Yaroslav

  • Фанат форума
  • Старожил
  • ****
  • Сообщений: 323
  • +0/-0
  • 0
    • Просмотр профиля
если строка не найдена
« Ответ #12 : 22 Июля 2003, 23:04:09 »
Цитировать
Wyclef:
1. Нафиг тебе метки NMAIL - достаточно просто last оставить;
с last у меня не работало
Цитировать
Wyclef:
2. Ну и запишешь ты в файл nmail.txt 10 одинаковых строк при 10-ти вызовах. Или так и надо?

гогда запишу? тот код что был последним не записывает если есть одинаковая строчка
Никогда не бойся делать то, что ты не умеешь. Помни, ковчег был построен любителем. Профессионалы построили \"Титаник\".

Оффлайн Wyclef

  • hello_worlder
  • Старожил
  • ****
  • Сообщений: 307
  • +0/-0
  • 2
    • Просмотр профиля
    • http://thug.narod.ru
если строка не найдена
« Ответ #13 : 22 Июля 2003, 23:16:37 »
Цитировать
тот код что был последним не записывает если есть одинаковая строчка


Понял, просто у тебя сначала написано:
open (FILE, "$tmails");
а потом:
open (FILE, ">>nmail.txt");
Я подумал ты с разными файлами работаешь, а на самом деле с одним...
It\'s nice to be important, but it\'s more important to be nice!

 

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