Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl 打印时间间隔而不是时间戳_Perl - Fatal编程技术网

Perl 打印时间间隔而不是时间戳

Perl 打印时间间隔而不是时间戳,perl,Perl,以下代码以每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+)

以下代码以每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

你需要在指定问题方面提高你的技能。为了达到这一点,你问了几个不同的问题,主要问题是你对问题的陈述不完整,或者从一个问题到下一个问题有所改变

我仍然担心,您总是将程序分为两部分—输入的处理和输出的生成—并且我确信这两部分可以结合在一起,形成比您以这种方式实现的更好、更可靠的解决方案

这是我之前的一个答案的变体,我想这是你想要的。因为您只展示了程序的后半部分,所以我无法提供完整的解决方案。此代码希望数据以与您已经使用的代码相同的方式显示在
@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

如果您提供
@lastArray
的内容,这个问题将更容易回答。因此,他真正想要的不是“增量”,而是时间戳所属的5分钟间隔。太棒了。)