+ -
当前位置:首页 → 问答吧 → 大家好,请教大家一个关于数据分类处理的问题,请大家帮我看看哦。

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

时间:2011-03-18

来源:互联网

大家好,偶最近遇到一个关于数据分类的问题,一直没有做成,请高手帮我指点一下。
整个操作大致如下:
我需要从一个报表中,提取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,进行排序打出。
希望各位前辈,能够指点我一下,这个分类问题,我该怎么解决呢?

作者: xixizhihua   发布时间: 2011-03-18

本帖最后由 珞水的大叔 于 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
复制代码

作者: 珞水的大叔   发布时间: 2011-03-18

谢谢大叔:)
我下次一定会注意的。

作者: xixizhihua   发布时间: 2011-03-18