Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: Общие вопросы > Вывести пользователей и кол-во посещенных страниц


Автор: EctelL 2.7.2011, 16:30
Здравствуйте!

Необходимо создать файл, в котором по каждому пользователю (файл Proxy.log)
отражается количество посещенных им страниц.

Вот, что сам написал, но выводит все ключи и значения равные 1.

Код

#!/usr/bin/perl
open(f1,"Proxy.log");
open(f2,"> Vivod.txt");
@input=readline(f1);
$col=$#input;
for ($i=0; $i<=$col; $i++){
    @array=split(' ',$input[$i]);
        %user=(@array[2]);
        if (exists $user{@array[2]}){
            $user{@array[2]}++        
            }
        else{
            $user{@array[2]}=1;
                        }
    foreach $key(sort{$user{$a} cmp $user{$b}} keys %user){            
    print(f2 "Пользователь:$key посетил $user{$key} страниц\n");}    
    }
close(f1);
close(f2);


Автор: SkoobyDoo 2.7.2011, 17:11
В каком формате файл Proxy.log?

Автор: EctelL 2.7.2011, 17:34
Первые 2 строки:

192.168.0.42 - sbo [22/Sep/2003:08:00:46 +0300] "CONNECT login.icq.com:443 HTTP/1.0" 200 379 New
192.168.0.40 - pro_fin [22/Sep/2003:08:00:55 +0300] "GET http://www.finam.ru/nmain.css HTTP/1.0" 304 0 Cache

Автор: alezzz 2.7.2011, 18:53
Обращение к элементу массива: $array[i].

%user=(@array[2]); -- в цикле, получается к %user не добавляется новый ключ, и как это вообще работает что-то не соображу.

начните с perlintro.

а по теме, я бы так сделал:
Код

while (<f1>){
    $user = (split ' ')[2];
    $users{$user}++;
}

foreach $user (keys %users){
    print f2 "$user: $users{$user}\n";
}

Автор: EctelL 2.7.2011, 19:59
Я только знакомлюсь с perl'ом. Разбираюсь по немногу.

За код спасибоsmile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)