-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 に答える