あんにんにっき。

日々思ったことや、おこったことを記録するブログ。要するに日記。

perlで作業時間管理のファイルを処理してみる

 ものの本によると、自分の作業時間を記録するという事には、良い効能があるらしい。その辺の効能はこの記事の内容では取り扱わないとして、とりあえず良いらしいので記録をするようにしてはいる。
 ところで記録したデータは集計し、統計し、情報と呼べる段階にまで加工しないと役には立たない。が、この集計というのは結構面倒なので自動化したいところ。で、ちょうどperlの勉強もしているし、練習がてら時間の集計をするスクリプトを書いてみることにした。

use strict;

my $prev_time;
my $prev_type;
my %time_per_type;

while(<>){
    chomp;
    my @data = split(/\t/, $_);
    my @time = split(/:/, $data[0]);
    my $current_time = $time[1] + $time[0] * 60;
    if (defined ($prev_time)){
	$time_per_type{$prev_type} += ($current_time - $prev_time);
    }
    $prev_time = $current_time;
    $prev_type = $data[1];
}

foreach my $key (sort keys(%time_per_type)){
    print "$key -> $time_per_type{$key}\n";
}

# 処理対象ファイルは 
# 開始時間(HH:MM形式)<タブ>作業種別<タブ>内容詳細 
# という並びで1行づつある想定。
# 例えば以下のような形式
# (最終行は、その前の作業の終了時間のみ入っている想定)
# 10:30	会議	午後の会議の打ち合わせ
# 11:20	資料作成	午後の会議用の資料修正
# 12:00 休憩
# 13:00 会議
# 15:00 資料作成	明日のプレゼン分
# 17:00 

 とりあえず、練習用なので、perlらしい書き方*1とか気にせずに書いてみた。
 #より下の部分を別のファイルにし、それのファイル名を引数に実行すると、

会議 -> 170
休憩 -> 60
資料作成 -> 160

 と、作業の種別毎に従事した時間(分単位)が得られた。csv形式で出力した方が便利そうだな。
 6章まで読んだ内容だけでこれくらいはできるのだな。この後の章で正規表現が出てくるので、さらに便利に使えそうな予感。

*1:初めてのperl第3版を読むと、perl的な書き方というのがあちこちに例示してあったりする