-1

我有一个如下所示的文本文件:

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 小时,这使得跟踪变得困难。关于如何使程序足够聪明以识别模式并能够给出总时间的答案的任何想法?

谢谢。

4

1 回答 1

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"

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

于 2013-07-26T18:40:17.563 回答