• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:勤務時間をみやすい表にしたいです)

勤務時間をみやすい表にする方法

このQ&Aのポイント
  • 勤務時間を整理し、見やすい表形式にする方法について相談です。
  • 現在、csv形式のtxtファイルとPerlを使用して日々の勤務表を作成していますが、より見やすい表にしたいです。
  • テキストの内容を昇順に並べ替えることはできましたが、表の形式にするためには勤務時間の結合や空きセルの処理などが必要で、どのように処理すればいいのかわからないです。

質問者が選んだベストアンサー

  • ベストアンサー
  • moon_piyo
  • ベストアンサー率60% (88/146)
回答No.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, '&nbsp'); $p0 += 2; } else { bar(1, '&nbsp'); $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>"; }

sibazuke
質問者

お礼

すごい! ありがとうございます。 どないしても出来なくって、不貞寝しちゃってましたm(__)m さっそく試してまいります! 取り急ぎ、お礼まで・・・。

関連するQ&A