|
ru.perl- RU.PERL ---------------------------------------------------------------------- From : Serge Cherpatyuk 2:4625/44.41 15 Aug 2000 17:32:22 To : Serge Cherpatyuk Subject : Re: algorithm -------------------------------------------------------------------------------- SC> Хотелось бы: что бы выдавало - к "этому" файлу обращались SC> "столько-то" раз "такого-то" числа. SC> Вот тут-то я и прошу подсказать алгоритм. таки сам сделал. Хочу что бы "попинали" код (желательно без "пальцев", а по делу ;) ). Может, чему полезному научусь. Предмет "пинания": ============================================================ #!/usr/bin/perl use strict; my @LogFiles = ( "/home/gray/work/perl/sites/log_obr/access_log", ); my ( $LogFile, $i, ); #main # { for($i = 0; $i <= $#LogFiles; $i++) { $LogFile = $LogFiles[$i]; &DoLog; } # } sub DoLog { my ( $IP, $un1, $un2, $w_date, $s_gmt, $method, $r_file, $protocol, $code1, $code2, @date_time, $date, $time, $c_date, %Urls, @list, $i, $y, ); undef( %Urls ); undef( $c_date ); $i = 0; return 1 if( ! -r $LogFile); if( !open( flog, $LogFile)) { print "Cannot open $LogFile: $!\n"; return 0; } while( <flog> ) { chop; ( $IP, $un1, $un2, $w_date, $s_gmt, $method, $r_file, $protocol, $code1, $code2 ) = split( /[ ]+/,$_,10); @date_time = split( /:/,$w_date, 2); ($date = $date_time[0]) =~ s/^\[//; $time = $date_time[1]; $method =~ s/^\"//; $protocol =~ s/\"$//; if( $r_file =~ /[gif,jpg,\/]$/i) { next; } if( !defined $c_date ) { $c_date = $date; } if( $c_date == $date) { if( !defined $Urls{$r_file} ) { $Urls{$r_file} = 0; } $Urls{$r_file}++; } else { while( (my $k, my $v) = each( %Urls )) { $list[$i] = $c_date . " " . $k . " " . $v; $i++; } $c_date = $date; undef( %Urls ); if( !defined $Urls{$r_file} ) { $Urls{$r_file} = 0; } $Urls{$r_file}++; } } while( (my $k, my $v) = each( %Urls )) { $list[$i] = $c_date . " " . $k . " " . $v; $i++; } for( $y = 0; $y <= $#list; $y++) { print "$list[$y]\n"; } } ========================================================== Gray. --- ifmail v.2.14.KSI2 * Origin: VIASoft, Ltd. (2:4625/44.41@fidonet) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.perl/104002f0ddbd8.html, оценка из 5, голосов 10
|