2013-07-26 29 views
-1

一时间计算器匹配我有一个文本文件,它看起来像这样:模式在Perl

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

这些时间(3点)或持续时间(3小时)? – ikegami

+0

你遇到什么问题? – ikegami

+2

你试图达到的目标并不完全清楚。如果这些是时间戳(就像它出现的那样),那么你必须澄清当它出现向后跳时的含义。那是上一次间隔的结束和新的开始?如果这些是持续时间,那么你不应该关心顺序或不连续性。 –

回答

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" 

,你需要过滤的开始和结束时间。除此之外,我们需要更多关于该问题的信息。

+0

这个问题没有被充分指定来提出答案。此外,这个答案应该是一个评论。 –

+0

为什么答案是评论?我想我不能评论,因为我需要50个声望。我在这里很新,为OT加分(如果你愿意,我会稍后再删除)。 – EverythingRightPlace

+0

因为它从一个问题开始,如果你的问题的答案不符合你的期望,那么答案就不适用。此外,如果您将您的帐户链接到第二个SO网站([su],[sf]等),您可以获得100个代表) –