免费注册 查看新帖 |

Chinaunix

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

大家好,请教大家一个关于数据分类处理的问题,请大家帮我看看哦。 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-03-18 10:58 |只看该作者 |倒序浏览
大家好,偶最近遇到一个关于数据分类的问题,一直没有做成,请高手帮我指点一下。
整个操作大致如下:
我需要从一个报表中,提取2类数据,再把它们分类整理好。

提取数据的工作,我已经用perl写成功了,生成的文件,格式如下:
end:sdad/wea/window/csdw/wee[90]          start: qid/wqw/reg[1]/32/ds
end:sdad/wea/window/brs/ess[42]              start: qid/wqw/reg[2]/ds/rea
end:sdad/wea/window/asw/wwe[56]           start: qid/wqw/reg[2]/ef/ew
end:sdad/wea/window/bbs/wer[23]             start: qid/wqw/reg[1]/qsc/rea
end:sdad/wea/eew/asw/wwe[79]                 start: qid/wqw/reg[1]/ece/ppo
end:sdad/wea/window/dee/wqde[81]           start: qid/wqw/awe/ece/rea
end:sdad/wea/window/asw/wwe[69]           start: qid/wqw/caew/dse/rea
end:sdad/wea/window/rte/dfd[42]                start: qid/wqw/reg[1]/ece/xew
end:sdad/wea/window/asw/wwe[42]           start: qid/wqw/reg[3]/ewc/fgh
end:sdad/wea/ewdsw/tee/jyt[42]                 start: qid/wqw/reg[2]/ece/rea

……
但在分类时候,一直没成功。
分类要求如下:
1.凡是end:后那个参数中,没有window的,一概无视。
2.end:后有window的,按start后的参数进行分类:
有reg[1]的一类,有reg[2]的一类,有reg[3]的一类,以此类推,最后是没reg的一类。

出来后的文件,预计形式是这样的:
1.start:qid/wqw/reg[1]/
end:sdad/wea/window/csdw/wee[90]         
end:sdad/wea/window/bbs/wer[23]
end:sdad/wea/window/rte/dfd[42]   

2. start: qid/wqw/reg[2]/ds/rea
end:sdad/wea/window/brs/ess[42]     
end:sdad/wea/window/asw/wwe[56]

3.start:qid/wqw/reg[3]/ewc/fgh
end:sdad/wea/window/asw/wwe[42]
……
N. start: qid/wqw/awe/ece/rea  
    end:sdad/wea/window/dee/wqde[81]
    start: qid/wqw/caew/dse/rea  
    end:sdad/wea/window/asw/wwe[69]


原来我尝试了用散列,用数组,效果一直不理想
一直没搞定,怎么把相关的进行分类,并按从1到N,进行排序打出。
希望各位前辈,能够指点我一下,这个分类问题,我该怎么解决呢?

论坛徽章:
0
2 [报告]
发表于 2011-03-18 11:20 |只看该作者
本帖最后由 珞水的大叔 于 2011-03-18 11:22 编辑

首先,请楼主不要中文逗号和英文逗号混用
不过你的思路已经很清晰了
下次记得要先把自己的代码贴出来啊

  1. #!/usr/bin/perl
  2. use strict;
  3. use warnings;

  4. my %result1;    #存放有reg[N]的
  5. my @result2;    #存放没有reg[N]的
  6. while(<DATA>){
  7.     next if $_ !~ /^\s*end.+?(\/window\/).+?\bstart/;
  8.     s/^\s+//;
  9.     s/\s+$//;
  10.     my @tmp = split /\s+(?=start)/;
  11.     if($tmp[1] =~ /(start: qid\/wqw\/reg\[\d+\])/){
  12.         push @{$result1{$1}},$tmp[0];
  13.     }
  14.     else{
  15.         push @result2,($tmp[1],$tmp[0]);
  16.     }
  17. }

  18. for (sort keys %result1){
  19.     print "$_\n".(join "\n",@{$result1{$_}})."\n\n";
  20. }

  21. print "\n\n";
  22. print "$_\n" for @result2;
  23. __DATA__
  24. end:sdad/wea/window/csdw/wee[90]          start: qid/wqw/reg[1]/32/ds
  25. end:sdad/wea/window/brs/ess[42]              start: qid/wqw/reg[2]/ds/rea
  26. end:sdad/wea/window/asw/wwe[56]           start: qid/wqw/reg[2]/ef/ew
  27. end:sdad/wea/window/bbs/wer[23]             start: qid/wqw/reg[1]/qsc/rea
  28. end:sdad/wea/eew/asw/wwe[79]                 start: qid/wqw/reg[1]/ece/ppo
  29. end:sdad/wea/window/dee/wqde[81]           start: qid/wqw/awe/ece/rea
  30. end:sdad/wea/window/asw/wwe[69]           start: qid/wqw/caew/dse/rea
  31. end:sdad/wea/window/rte/dfd[42]                start: qid/wqw/reg[1]/ece/xew
  32. end:sdad/wea/window/asw/wwe[42]           start: qid/wqw/reg[3]/ewc/fgh
  33. end:sdad/wea/ewdsw/tee/jyt[42]                 start: qid/wqw/reg[2]/ece/rea
复制代码

论坛徽章:
0
3 [报告]
发表于 2011-03-18 11:43 |只看该作者
谢谢大叔:)
我下次一定会注意的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP