Perl中时间计算器的模式匹配

时间:2013-07-26 18:25:40

标签: perl time timer pattern-matching calculator

我有一个看起来像这样的文本文件:

03:56:10.499
03:56:29.839
03:56:54.779
03:56:59.079
03:57:02.829
03:57:09.739
03:58:25.789
03:58:33.679
03:58:36.059
03:58:36.559
03:59:00.059
03:59:30.189
03:59:30.429
03:59:35.409
03:59:39.229
03:59:44.779
03:59:56.629
03:59:58.819
04:00:16.509
04:00:37.729
04:00:46.859
04:00:47.129
04:01:00.959
04:01:17.449
04:01:17.669
04:01:55.229
04:02:04.549
03:14:22.623
03:14:23.733
03:14:24.663
03:14:54.143
03:16:00.813
03:16:02.743
03:16:15.483
03:16:30.113
03:16:48.913
03:16:50.973
03:17:02.683
03:17:05.563
03:18:19.283
03:18:20.473
03:18:22.223
03:18:58.503
03:18:59.553
03:19:06.313
03:19:11.943
03:19:13.063
03:19:13.063
03:19:40.133

(这只是其中的一小部分)

正如你所看到的,它是一个时代的集合,我需要编写一个程序,它会添加所有的时间(不需要毫秒)。棘手的部分是,你可以看到它不是完全连续的。它从3小时开始然后转到4然后回到3,这使得难以跟踪。关于如何使程序足够聪明以识别模式并能够给出总时间答案的任何想法?

感谢。

1 个答案:

答案 0 :(得分:1)

如果您想获得所有时间的总和,那么订单并不重要。只需将秒,分钟和小时添加为秒,最后以可读格式将其拆分

#!/usr/bin/perl -w

use strict;

my $sum = 0;
open (FH, "data.txt") or die "Error opening";
for my $line (<FH>){
chomp $line;
(my $h,my $m,my $s) = split ':',$line;
$sum = $sum + 3600*$h + 60*$m + $s;
}
close FH;

my $days = int($sum/(24*60*60));
my $hours = ($sum/(60*60))%24;
my $mins =($sum/60)%60;
my $secs = $sum%60;

print "days=$days hours=$hours mins=$mins secs=$secs\n"

如果不是输入数据中的相对时间,则需要过滤开始和结束时间。除此之外,我们还需要有关该问题的更多信息。