免费注册 查看新帖 |

Chinaunix

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

求助,从表中删除指定的行。发现运行错误,请大家帮忙看一下代码 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-03-15 12:36 |只看该作者 |倒序浏览
本帖最后由 ygh1989 于 2013-03-15 12:38 编辑

小弟是perl菜鸟,写了个程序发现错了,但是找不到问题,请论坛前辈指教。
有两个表,一个大表 BIG,一个表POS。要从BIG表中删除POS中的每一行。(BIG中包含了POS,要从BIG中删除POS的行)
但是运行后,产生的文件还是原来的BIG表,并没有删掉POS的行
另外,这个程序运行很慢,有没有更好的算法呢?
求指教 万分谢谢!
  1. #/usr/bin/perl
  2. use strict;
  3. use warnings;

  4. die "Usage: perl $0 POSTIVE BIG OUT\n" unless (@ARGV == 3);

  5. open (POS, $ARGV[0]) or die "Can not open file $ARGV[0]\n";
  6. open (BIG, $ARGV[1]) or die "Can not open file $ARGV[1]\n";
  7. open (OUT, ">$ARGV[2]") or die "Can not open file $ARGV[2]\n";

  8. my %postag = ();

  9. while(<POS>){
  10.         chomp;
  11.         my @line = split/\s+/;
  12.         my $var = $line[0]."\t".$line[1];
  13.         $postag{$var} =1;
  14. }

  15. while(<BIG>){
  16.         chomp;
  17.         my $flg = 0;
  18.         my @line = split/\s+/;
  19.         foreach my $tag(keys %postag){
  20.                 my @var = split(/\t/,$tag);
  21.                 if((($line[0] eq $var[0])&&($line[1] eq $var[1]))||(($line[0] eq $var[1])&&($line[1] eq $var[0]))){
  22.                         $flg=1;
  23.                         last;
  24.                 }
  25.         }
  26.         if(!$flg){
  27.                 print OUT join("\t",@line),"\n";
  28.         }
  29.         
  30. }
复制代码

论坛徽章:
6
卯兔
日期:2013-11-26 14:52:02丑牛
日期:2014-02-19 18:01:25卯兔
日期:2014-05-20 20:34:06白羊座
日期:2014-05-23 13:39:232015亚冠之大阪钢巴
日期:2015-08-07 20:57:582015亚冠之大阪钢巴
日期:2015-09-02 14:09:09
2 [报告]
发表于 2013-03-15 14:15 |只看该作者
  1. use strict;
  2. use warnings;
  3. use Tie::File;
  4. my (@pos, @big);
  5. tie @pos,'Tie::File', 'POS';
  6. tie @big,'Tie::File', 'BIG';
  7. my @same=@big;
  8. foreach my $delete_subscript(0..$#pos){
  9.     foreach my $big_subscript(0..$#big){
  10.         if($pos[$delete_subscript] eq $big[$big_subscript]){
  11.             delete $same[$big_subscript];
  12.         }
  13.     }
  14. }
  15. @same= grep defined($_), @same;
  16. @big=@same;
  17. untie @pos;
  18. untie @big;
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP