【问题标题】:Pattern matching for a time calculator in perl [closed]perl中时间计算器的模式匹配[关闭]
【发布时间】:2013-07-26 18:25:39
【问题描述】:

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

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

谢谢。

【问题讨论】:

  • 这些是时间(3 点)还是持续时间(3 小时)?
  • 你遇到了什么问题?
  • 完全不清楚您要达到的目标。如果这些是时间戳(如其所示),那么您必须澄清向后跳跃时的含义。这是上一个间隔的结束和新间隔的开始吗?如果这些是持续时间,那么您不应该关心顺序或不连续性。

标签: perl time timer pattern-matching calculator


【解决方案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"

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

【讨论】:

  • 该问题未充分指定,无法提出答案。另外,这个答案应该是评论。
  • 为什么答案应该是评论?我想我不能发表评论,因为我需要 50 声望。我在这里很新,对于 OT(如果你愿意,我稍后会删除它)。
  • 因为它以一个问题开头,如果您的问题的答案不是您所期望的,则该答案不适用。此外,如果您将您的帐户链接到第二个 SO 网站(Super UserServer Fault 等),您可以获得 100 个代表
  • 要获得 100 个代表,您需要在一个站点上至少有 200 个代表。我创建帐户的主要原因是因为我喜欢发表评论,但作为新用户获得 50 名代表需要一段时间。
  • 是安卓日志。它计算某个测试的运行时间,但是时间记录不是连续的。考虑到它会跳来跳去(adb 计时器不是很好),我希望能够将所有时间加在一起。所以假设我有一个从 A 到 B 的连续时间段,然后我有另一个从 X 到 Y 的连续时间,所以我希望能够添加 (AtoB) + (XtoY) 的总和。
猜你喜欢
  • 1970-01-01
  • 2017-03-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-13
  • 1970-01-01
相关资源
最近更新 更多