The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"Исскуство програмирования"
Вариант для распечатки Архивированная нить - только для чтения! 
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [Проследить за развитием треда]

"Исскуство програмирования"
Сообщение от vova Искать по авторуВ закладки on 29-Апр-03, 07:13  (MSK)
Приветствую всех.
Написал такой скрипт: (может гдето коряво, не судите строго, только учусь)

#!/usr/bin/perl

$in_passwd = "/etc/passwd";
$in_alias = "/etc/mail/test_alias.txt";

open (PASSWD,"$in_passwd") or die "Can't open passwd file. $!.";
open (ALIAS,"$in_alias") or die "Can't open passwd file. $!.";

while (defined($alias=<ALIAS>)) {
              chomp ($alias);
              while (defined($passwd=<PASSWD>)) {
              ($user,$d,$d,$d,$comment,$d,$d) = split(/:/,$passwd);
      chomp ($user);
                      $comment =~ tr/жюгсоьазвуйнрыэехпидлтчфмбцъБВЧЗДЕЦЪЙКЛМНОПРТУФХЖИГЮЫЭЯЩШЬАС/ФЧЦЯНЭЮГБСИМПШЩЕУОХДКРВТЛАЖЗабвгдежзийклмнопрстуфхцчшщъыьэюя/;
              if ($alias eq $user) {
                print "$comment\n";
               last;
       }
  }
}

close (ALIAS);
close (PASSWD);

скрипт сравнивает файлы passwd test_alias.txt на наличие одинаковых учетных записей.
Проблема вот в чем: когда происходит вызод из внутреннего циска по last, то при в ходе в него проверка начинается не с первой строки файла passwd
а со следующей от той, с которой был осуществлен выход, а надо что бы с первой. Как это сделать не подскажите ?

Заранее спасибо всем.

  Рекомендовать в FAQ | Cообщить модератору | Наверх

 Оглавление

Индекс форумов | Темы | Пред. тема | След. тема
Сообщения по теме

1. "Исскуство програмирования"
Сообщение от vova Искать по авторуВ закладки on 29-Апр-03, 07:17  (MSK)
>скрипт сравнивает файлы passwd test_alias.txt на наличие одинаковых учетных записей.
>Проблема вот в чем: когда происходит вызод из внутреннего циска по last,

извиняюсь за ошибки

"выход из внутреннего цикла"

  Рекомендовать в FAQ | Cообщить модератору | Наверх

2. "Исскуство програмирования"
Сообщение от Parish Искать по авторуВ закладки on 29-Апр-03, 15:30  (MSK)
Проще будет если вначале "/etc/mail/test_alias.txt" считать в хеш, а потом проверять defined($Alias{$user})
  Рекомендовать в FAQ | Cообщить модератору | Наверх

3. "Исскуство програмирования"
Сообщение от XMan Искать по авторуВ закладки on 29-Апр-03, 17:45  (MSK)
А чего ты хотел ? Спорим, у тебя то же самое будет и в любом другом языке ? :)
Либо закрывай файл и открывай снова, либо (что несомненно лучше) делай seek в начало :)
  Рекомендовать в FAQ | Cообщить модератору | Наверх

4. "Исскуство програмирования"
Сообщение от vova Искать по авторуВ закладки on 30-Апр-03, 06:09  (MSK)
>А чего ты хотел ? Спорим, у тебя то же самое будет
>и в любом другом языке ? :)
>Либо закрывай файл и открывай снова, либо (что несомненно лучше) делай seek
>в начало :)

т.е. закрывать passwd сразу после last и открывать перед внутренним циклом ?

а что такое seek ?


  Рекомендовать в FAQ | Cообщить модератору | Наверх

5. "Исскуство програмирования"
Сообщение от vova Искать по авторуВ закладки on 30-Апр-03, 07:13  (MSK)
>а что такое seek ?

нашел. и вот что получилось в итоге:

#!/usr/bin/perl

$in_passwd = "/etc/passwd";
$in_alias = "/etc/mail/test_alias.txt";

open (PASSWD,"$in_passwd") or die "Can't open passwd file. $!.";
open (ALIAS,"$in_alias") or die "Can't open passwd file. $!.";

while (defined($alias=<ALIAS>)) {
              chomp ($alias);
        #      open (PASSWD,"$in_passwd") or die "Can't open passwd file. $!.";
              while (defined($passwd=<PASSWD>)) {
              ($user,$d,$d,$d,$comment,$d,$d) = split(/:/,$passwd);
      chomp ($user);
                      $comment =~ tr/жюгсоьазвуйнрыэехпидлтчфмбцъБВЧЗДЕЦЪЙКЛМНОПРТУФХЖИГЮЫЭЯЩШЬАС/ФЧЦЯНЭЮГБСИМПШЩЕУОХДКРВТЛАЖЗабвгдежзийклмнопрстуфхцчшщъыьэюя/;
              if ($alias eq $user) {
                print "$comment\n";
#                                close (PASSWD);
                               seek (PASSWD,0,0);
               last;
       }
  }
}

close (ALIAS);
close (PASSWD);

вроде работает как надо. Однако может что то неверно ?


  Рекомендовать в FAQ | Cообщить модератору | Наверх

6. "Исскуство програмирования"
Сообщение от Parish Искать по авторуВ закладки on 30-Апр-03, 15:08  (MSK)
>вроде работает как надо. Однако может что то неверно ?
имхо алгоритм

  Рекомендовать в FAQ | Cообщить модератору | Наверх

7. "Исскуство програмирования"
Сообщение от vova Искать по авторуВ закладки on 04-Май-03, 06:44  (MSK)
>>вроде работает как надо. Однако может что то неверно ?
>имхо алгоритм

а как правильно сделать ?


  Рекомендовать в FAQ | Cообщить модератору | Наверх

8. "Исскуство програмирования"
Сообщение от XMan Искать по авторуВ закладки on 05-Май-03, 00:11  (MSK)
Parish тебе уже сказал:

Проще будет если вначале "/etc/mail/test_alias.txt" считать в хеш, а потом проверять defined($Alias{$user})


:)

  Рекомендовать в FAQ | Cообщить модератору | Наверх

9. "Исскуство програмирования"
Сообщение от vova Искать по авторуВ закладки on 05-Май-03, 05:45  (MSK)
>Parish тебе уже сказал:
>
>Проще будет если вначале "/etc/mail/test_alias.txt" считать в хеш, а потом проверять defined($Alias{$user})
>
>
>
>:)


ясно. буду пробовать сделать как положено
спасибо всем большое за помощь :))

  Рекомендовать в FAQ | Cообщить модератору | Наверх


Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Пожалуйста, прежде чем написать сообщение, ознакомьтесь с данными рекомендациями.




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2025 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру