跳至内容
wiki
用户工具
登录
站点工具
搜索
工具
显示页面
修订记录
导出 PDF
反向链接
最近更改
媒体管理器
网站地图
登录
>
最近更改
媒体管理器
网站地图
您在这里:
start
»
linux
»
perl
»
剪贴板分析工时
您的足迹:
linux:perl:剪贴板分析工时
本页面只读。您可以查看源文件,但不能更改它。如果您觉得这是系统错误,请联系管理员。
====== perl剪贴板分析工时 ====== 主要涉及剪贴板问题,有可能复制下来是中文乱码的原因,需要在复制内容时切换为中文键盘。 另外需要设置gbk的原因是命令行默认使用的gbk编码,直接输出其它的编码应该会是出现乱码。 [[linux:perl:clipboard复制中文字符到剪切板乱码]] <code perl> #!/usr/bin/perl use utf8; use Win32::Clipboard; #use Clipboard; use Encode; binmode(STDOUT, ":encoding(gbk)"); binmode(STDIN, ":encoding(gbk)"); binmode(STDERR, ":encoding(gbk)"); $val = Win32::Clipboard::GetText(); #$val = Clipboard::paste(); $val = decode("gbk", $val); #$val = decode("utf8", $val); print $val; $tmp_file = "_ana_work_time_clip.txt"; open(fh, '>:encoding(utf8)', "$tmp_file") || die "can't open file!"; print fh $val; close(fh); open(fh, '<:encoding(utf8)', $tmp_file) || die "can't open file!"; $t = 0; $weekday = 6; @weekstrar = ("ERROR", "周一","周二","周三","周四","周五","周六","周日"); $yymm = "----"; $start_match = 0; $worktime_valid = 0; $jiejiari = ""; while ($line = <fh>) { chomp($line); #print "line = $line\n"; if ($line =~ /^\s*(\d+)\s*年\s*(\d+)\s*月/) { $yymm = "$1-$2"; } elsif ($line =~ /周[日一二三四五六]/) { $start_match = 1; } elsif($start_match == 0) { next; } elsif ($line =~ /^\s*(\d+)\s*$/) { $day = $1; #print "$day vs $weekday \n"; $weekday = $weekday + 1; # first weekday is 7 Sunday if ($weekday == 8) { $weekday = 1; } if ($worktime_valid == 1) { if ($jiejiari ne "") { print " $jiejiari\n"; } else { print ("\n"); } } $worktime_valid = 0; $jiejiari = ""; } elsif ($line =~ /(\d+):(\d+)\s*-\s*(\d+):(\d+)/) { $d1 = $1; $d2 = $2; $d3 = $3; $d4 = $4; if ($weekday >=1 && $weekday <=5) { $m = ($d3-$d1)*60 + ($d4-$d2) - 60*9; $half_h = int($m/30); $h = 0; if ($half_h >= 4) { $h = $half_h/2; } } elsif ($weekday >=6 && $weekday <=7) { $m = ($d3-$d1)*60 + ($d4-$d2); $half_h = int($m/30); $h = 0; if ($half_h >= 8) { $h = $half_h/2; } } $t = $t + $h; $weekstr = $weekstrar[$weekday]; #$weekstr = $weekday; print "$yymm".sprintf("-%02d",$day)."($weekstr), 工作时间: $d1:$d2 - $d3:$d4, 延迟:".sprintf("%5d分",$m).", 有效:". sprintf("%5.1f小时",$h).", 累计:". sprintf("%5.1f小时",$t); $worktime_valid = 1; } elsif ($line =~ /(.*)/) { $jiejiari = $1; } } close(fh); </code>
linux/perl/剪贴板分析工时.txt
· 最后更改: 2024/03/21 15:46 由
zhangguo
页面工具
显示页面
修订记录
反向链接
导出 PDF
回到顶部