0

次のコードは、5分ごとに最大のビジー値を出力します。タイムスタンプの代わりに増分(例:02:19:09の場合は2:15)を印刷するにはどうすればよいですか?

my @maxima;  
    for my $record (@lastArray) {    
        my @fields = $record =~ /([^,\s]+)/g;   
        next unless @fields;    
        my @range = @fields[1..4];   
        $range[2] =~ s|(\d+):\d\d$|5*int($1/5)|e;   
        my $range = join ' ', @range;   
        my $value = $fields[5];    
        if (@maxima == 0 or $range ne $maxima[-1][0]) {     
            push @maxima, [$range, $value, $record];   
        }   
        else {     
            @{$maxima[-1]}[1,2] = ($value, $record) if $maxima[-1][1] > $value;   
        } 
    }  
    print $_->[2] for @maxima; 

現在の出力:

  Mon,Jun,25,02:19:09,2012,999,1,0,1,0,0,0,0,1,0,0
Mon,Jun,25,02:21:09,2012,999,1,0,1,0,0,0,0,1,0,0
Mon,Jun,25,02:25:10,2012,999,1,0,1,0,0,0,0,1,0,0
Mon,Jun,25,02:56:10,2012,999,1,0,1,0,0,0,0,1,0,0
Mon,Jun,25,03:00:10,2012,999,1,1,0,0,0,0,0,0,0,0
Mon,Jun,25,03:08:10,2012,999,1,0,1,0,0,0,0,1,0,0
Mon,Jun,25,03:10:10,2012,999,1,0,1,0,0,0,0,1,0,0
Mon,Jun,25,03:24:11,2012,999,1,0,1,0,0,0,0,1,0,0
Mon,Jun,25,03:37:11,2012,999,1,0,0,0,0,0,1,0,0,0
Mon,Jun,25,03:40:11,2012,999,1,0,1,0,0,0,0,1,0,0
4

1 に答える 1

2

問題を特定するスキルに取り組む必要があります。この点に到達するためにいくつかの異なる質問をしましたが、主な問題は、問題の記述が不完全であるか、ある質問から次の質問に変わることです。

プログラムを常に2つに分けて表示するのではないかと心配しています。入力の処理と出力の生成です。2つを組み合わせて、これを達成したよりも優れた、より信頼性の高いソリューションを形成できると確信しています。仕方。

これは、あなたが望むと思うことを行う私の以前の回答の1つのバリエーションです。あなたはあなたのプログラムの後半だけを示したので、私は完全な解決策を提供することはできません。@lastArrayこのコードは、すでに使用したコードと同じ方法でデータが表示されることを想定しています。

my @maxima;

for my $record (@lastArray) {    

    my @fields = split /,/, $record;
    next unless grep $_, @fields;    

    $fields[3] =~ s|(\d+):\d\d$|sprintf '%02d', 5*int($1/5)|e;
    $record = join ',', @fields;
    my $key = join ' ', @fields[1..4];
    my $value = $fields[5];

    if (@maxima == 0 or $key ne $maxima[-1][0]) {     
        push @maxima, [$key, $value, $record];   
    }   
    else {     
        @{$maxima[-1]}[1,2] = ($value, $record) if $maxima[-1][1] > $value;   
    } 
}  
print $_->[2] for @maxima; 

出力

Mon,Jun,25,02:15,2012,999,1,0,1,0,0,0,0,1,0,0
Mon,Jun,25,02:20,2012,999,1,0,1,0,0,0,0,1,0,0
Mon,Jun,25,02:25,2012,999,1,0,1,0,0,0,0,1,0,0
Mon,Jun,25,02:55,2012,999,1,0,1,0,0,0,0,1,0,0
Mon,Jun,25,03:00,2012,999,1,1,0,0,0,0,0,0,0,0
Mon,Jun,25,03:05,2012,999,1,0,1,0,0,0,0,1,0,0
Mon,Jun,25,03:10,2012,999,1,0,1,0,0,0,0,1,0,0
Mon,Jun,25,03:20,2012,999,1,0,1,0,0,0,0,1,0,0
Mon,Jun,25,03:35,2012,999,1,0,0,0,0,0,1,0,0,0
Mon,Jun,25,03:40,2012,999,1,0,1,0,0,0,0,1,0,0
于 2012-07-06T17:40:34.170 に答える