- ベストアンサー
勤務時間をみやすい表にする方法
- 勤務時間を整理し、見やすい表形式にする方法について相談です。
- 現在、csv形式のtxtファイルとPerlを使用して日々の勤務表を作成していますが、より見やすい表にしたいです。
- テキストの内容を昇順に並べ替えることはできましたが、表の形式にするためには勤務時間の結合や空きセルの処理などが必要で、どのように処理すればいいのかわからないです。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
こんちは 現在のテキストの仕組みでサンプルをつくってみましたけど #!perl open(F, "<20080701.txt") || die; open(HTML, ">kinmu.htm"); select(HTML); while (<F>) { chomp; my ($code, $kinm, $time1, $time2) = split(/,/); my $p1 = foo($time1); my $p2 = foo($time2); $p1m = $p1 if ($p1m > $p1 || !defined($p1m)); $p2m = $p2 if ($p2m < $p2 || !defined($p2m)); push(@{$data{$kinm}}, [$p1, $p2-$p1, $code]); } ## # 範囲の最小値と最大値 # 8:00 ~ 20:00固定なら # 下記2行を生かす #$p1m = foo("08:00"); #$p2m = foo("20:00"); $p1m = int($p1m/2) * 2; $p2m = int($p2m/2+0.5) * 2; ## # HTML作成 print "<html><body><table border=1>"; print "<tr align=center><td></td>\n"; for (my $t = $p1m/2; $t < $p2m/2; $t++) { print "<td colspan=2>$t時</td>"; } print "</tr>\n"; print "<tr align=center><td></td>\n"; for (my $t = $p1m; $t < $p2m; $t++) { print "<td width=30 height=0></td>"; }; print "</tr>\n"; #勤務テーブルごとにぐるぐる foreach $kinm (keys %data) { my $v = $data{$kinm}; push(@{$v}, [$p2m, 0, 'END']); my $p0 = $p1m; print "<tr align=center><td>$kinm</td>"; foreach (sort {$a->[0] <=> $b->[0]} @{$v}) { my ($p1, $r1, $code) = @{$_}; while ($p0 < $p1) { #誰も勤務していない部分を一時間ごとに作成 if ($p0 + 2 <= $p1 && $p0 % 2 == 0) { bar(2, ' '); $p0 += 2; } else { bar(1, ' '); $p0++; } } next if ($r1 == 0); #勤務している部分を作成 bar($r1, $code); $p0 = $p1 + $r1; } print "</tr>\n"; } print "</table></body></html>"; sub foo { my($a, $b) = split(/:/, $_[0]); return($a * 2 + ($b / 30)); } sub bar { my($r, $code) = @_; $r == 1 ? print "<td>$code</td>" : print "<td colspan=$r>$code</td>"; }
お礼
すごい! ありがとうございます。 どないしても出来なくって、不貞寝しちゃってましたm(__)m さっそく試してまいります! 取り急ぎ、お礼まで・・・。