免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2291 | 回复: 5
打印 上一主题 下一主题

请教方家:计算xml文件中某元素的总和及平均值 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-05-04 20:23 |只看该作者 |倒序浏览
计算此xml文件中price元素的总和及平均值.
我见过其它语言的sax版本,如何用perl达到同样效果?
请方家赐教!

<?xml version="1.0"?>;
<!DOCTYPE -------------------------->;
<DataSet>;
<Data1>;
  <book>;book1</book>;
  <price>;55</price>;
</Data1>;
<Data2>;
  <book>;book2</book>;
  <price>;66</price>;
</Data2>;
<Data3>;
  <book>;book3</book>;
  <price>;77</price>;
</Data3>;
</DataSet>;

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
2 [报告]
发表于 2005-05-05 01:40 |只看该作者

请教方家:计算xml文件中某元素的总和及平均值


  1. /home/lee#cat ex.pl
  2. #!perl -w
  3. use strict;
  4. open FH,"<data.txt"or die ("Open error!");
  5. my @array;
  6. my $sum=0;
  7. while(<FH>;){
  8.         if(/price/){
  9.         $_=~s/<price>;|<\/price>;//g;
  10.         push @array,$_;
  11.         }
  12. }
  13. foreach my $value(@array){
  14.         $sum+=$value;
  15. }
  16. print sprintf "%s%.2f\n","sum=",$sum;
  17. print sprintf "%s%.2f\n","avg=",$sum/($#array+1);
  18. close FH;
复制代码

result:
/home/lee#perl ex.pl
sum=198.00
avg=66.00

PS:初学perl,请大家赐教
如果用awk的话一句就解决了

  1. awk -F'[<|>;]' '/price/{n++;sum+=$3}END{printf "%s%.2f\n%s%.2f\n","sum=",sum,"avg=",sum/n}' data.txt
复制代码

论坛徽章:
0
3 [报告]
发表于 2005-05-05 11:18 |只看该作者

请教方家:计算xml文件中某元素的总和及平均值

呵呵,cool!我的本意是用perl的xml module实现,寂寞烈火大侠的方法也可以解决我的问题,醍醐灌顶啊! 多谢! 不过xml还要继续学,perl更是不学不行啊!awk看上去也很酷啊,but I only have one life啊!  

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
4 [报告]
发表于 2005-05-05 12:39 |只看该作者

请教方家:计算xml文件中某元素的总和及平均值

while(<FF>{
   if(/<price>;(.*?)</price>;/){
      $sum+= $1;
      $num++;
   }
}

print "sum = $sum\n $average = ".$sum/$num."\n";

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
5 [报告]
发表于 2005-05-05 17:02 |只看该作者

请教方家:计算xml文件中某元素的总和及平均值

原帖由 "apile" 发表:
while(<FF>{
   if(/<price>;(.*?)</price>;/){
      $sum+= $1;
      $num++;
   }
}

print "sum = $sum\n $average = ".$sum/$num."\n";

  向您学习!    

论坛徽章:
0
6 [报告]
发表于 2005-05-08 00:03 |只看该作者

请教方家:计算xml文件中某元素的总和及平均值

while(<FF>{
  if(/<price>;(.*?)</price>;/){
     $sum+= $1;
     $num++;
  }
}
print "sum = $sum\n $average = ".$sum/$num."\n";


apile大侠出手不凡啊,不过if(/<price>;(.*?)</price>;/)应为
if(/<price>;(.*?)<\/price>;/)啊,漏了一"\"足以让菜鸟思不得解啊,
现已顺利消化,受益匪浅,佩服!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP