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章まで読んだ内容だけでこれくらいはできるのだな。この後の章で正規表現が出てくるので、さらに便利に使えそうな予感。