Re: [问题] 要统计同一天同一小时资料

楼主: jkchang (JK)   2017-03-14 19:02:15
※ 引述《CindyLinz (Cindy Wang)》之铭言:
: ※ 引述《asiagodfater (亚洲统粉前来报到)》之铭言:
: : 无奈于小弟是程设新手,最菜的那种
: : 目前想要把同天同小时的资料做平均然后输出
: : 目前写成这样
: : 不知道错在哪里
: : http://pastebin.com/Fnxs2Jdk
: : 不知道有没有大哥大姐可以给点指导,程式码内注解掉的部分为原始资料的一小部分
: : 求解求帮助
: 你每一次 <$fh> 的动作会从档案中读进来新的一行,
: 你原本的写法可能会每区漏掉一行..
: goto 在没特别好处的时候少用比较好~
: 然后, use strict 与 use warnings 开起来通常会是好习惯~
: 最后面是我试作的程式:
: 用 <DATA> 可以把 __DATA__ 后面的东西当成档案读进来,
: regex 可以只 capture 你要的部分, 这样就比较不需要去数 capture 的编号了.
: 然后, regex 里面的 . 是特殊字符, 加一下反斜线比较好.
: 我在日期与小时的部分是把年月日时四个字段一起抓进来,
: 所以要用 eq 这种字串比对.
: while( <ooxx> ) 这样写法, 在 while 里面没指定读进来的东西要放哪, 会读一行进 $_
: if( /ooxxooxx/ ) 这样写法, 没有指定 regex 要跟谁比对, 会跟 $_ 比对
: 不过如果程式复杂的话, 这种写法会让 $_ 重复地被盖来盖去就是不好的习惯了~
: print 要印的东西如果想要包含一点点计算, 像是我需要一个除法来作平均,
: 可以让 print 印好几项, 将这个计算的 expression 独立放置, 不要塞在字串里面~
: 最后, 我不是大姐, 不准叫我大姐~ v_v
: #!/usr/bin/perl
: use strict;
: use warnings;
: my($key, $sum, $count) = ('', 0, 0);
: while( <DATA> ) {
: if( /(\d+-\d+-\d+-\d+):\d+:\d+ (\d+\.\d+)/ ) {
: if( $1 eq $key ) {
: $sum += $2;
: ++$count;
: }
: else {
: if( $count ) {
: print "$key ", $sum/$count, "\n";
: }
: $key = $1;
: $sum = $2;
: $count = 1;
: }
: }
: }
: if( $count ) {
: print "$key ", $sum/$count, "\n";
: }
: __DATA__
: 2017-3-7-0:16:20 3.030
: 2017-3-7-0:18:21 2.857
: 2017-3-7-0:20:20 2.870
: 2017-3-7-0:22:20 2.991
: 2017-3-7-0:24:20 3.118
: 2017-3-7-1:45:20 3.152
: 2017-3-7-1:31:20 3.421
: 2017-3-8-1:45:20 2.665
: 2017-3-8-1:31:20 5.765
改用hash 来做, 如果日期非顺序性可以考虑看看:
#!/usr/bin/perl
%date = ();
%key_cnt = ();
while (<DATA>) {
if (/(\d+-\d+-\d+-\d+):\d+:\d+ (\d+\.\d+)/) {
$key_cnt{$1}++;
if (exists $date{$1}) {
$date{$1} += $2;
} else {
$date{$1} = $2;
}
}
}
foreach $key(sort keys %date) {
if (exists $key_cnt{$key}) {
print $key," => ",$date{$key}/$key_cnt{$key},"\n";
}
}
__DATA__
2017-3-7-0:16:20 3.030
2017-3-7-0:18:21 2.857
2017-3-7-0:20:20 2.870
2017-3-7-0:22:20 2.991
2017-3-7-0:24:20 3.118
2017-3-7-1:45:20 3.152
2017-3-7-1:31:20 3.421
2017-3-8-1:45:20 2.665
2017-3-8-1:31:20 5.765
作者: CindyLinz (Cindy Wang)   2017-03-16 03:10:00
为什么你的缩排这么地...有个性 XD
作者: Neisseria (Neisseria)   2017-03-19 08:11:00
看起来很像混用 tab 和 space 后样子 XD

Links booklink

Contact Us: admin [ a t ] ucptt.com