[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[问题求助] 大婶帮忙看看单词比对的Perl小程序有木有什么问题啊

新手,想写一个单词比对的小程序
下面是两个文件列举的部分内容,小部分内容
这个写法有什么问题,我刚刚看入门书!最终目的:通过比对找到8k.txt里面有,但是n.txt里面没有的单词,目前这个代码写的是找到两个文档都的单词,但是也不对
有改的希望么?
8k.txt
abandon                        v.抛弃,放弃
abandonment                        n.放弃
abbreviation                        n.缩写
abeyance                        n.缓办,中止
abide                        v.遵守
ability                        n.能力
able                        adj.有能力的,能干的
abnormal                        adj.反常的,变态的

n.txt
alga
alumna
alumnus
amoeba
analysis
antenna
apex
appendix
auto
automaton
  1. open($IN,"<8k.txt") or die $!;
  2. open($sp_n,"<n.txt") or die $!;
  3. while(<$IN>){
  4.    chomp;
  5.    tr/\r\n//d;
  6.    s/\s+/ /g;
  7.    s/^\s+//;
  8.    s/\s+$//;
  9.    $line1=$_;
  10. if($line1=~/[a-z]*n\./){
  11.    ($word,$trans)=split(/\s+/,$line1);
  12.      $dic{$word}=$trans;
  13.   }
  14.   
  15. while(<$sp_n>){
  16.        chomp;
  17.        $line2=$_;
  18.        $sp_w{$line2}=1;
  19.          
  20.       
  21.     if(exists $dic{$line2}){  
  22.     print "$line2\n";
  23.    
  24. }
  25. }
  26. }
复制代码

看着自己写的代码,真是不好意思!ugly!!!

TOP

自己解决了

TOP

本帖最后由 949825667@qq.co 于 2016-8-12 11:42 编辑

虽然还是很丑陋,不过至少能解决问题了
open($IN,"<8k.txt") or die $!;
open($sp_n,"<n.txt") or die $!;
while(<$IN>){
   chomp;
   tr/\r\n//d;
   s/\s+/ /g;
   s/^\s+//;
   s/\s+$//;
   $line1=$_;
if($line1=~/[a-z]*n\./){
           $line2=$line1;
           ($word,$trans)=split(/\s+/,$line2);       
     
  
$dic{$word}=$trans;
#print"$dic{$word}\n";


#print"$word\n";
while(<$sp_n>){
               chomp;
               $line3=$_;
       $sp_w{$line3}=1;}
         
               #print "$word\n";
         #foreach (keys %dic){
    if(!exists $sp_w{$word}){  
            print "$word\n";
          
         }
        #}

}
}

TOP

本帖最后由 523066680 于 2016-8-12 11:03 编辑

回复 4# 949825667@qq.co


    楼上注册了两个号?到我的论坛吧,哈哈

code-by.org

TOP

回复 5# 523066680


    原来的账号忘记了,后来又想起来了

TOP

本帖最后由 523066680 于 2016-8-12 11:23 编辑

回复 6# 949825667@qq.co


    发代码建议用 [ code ]代码[ /code ] 标签 这样代码比较直观也容易复制(实际使用时把空格去掉)。


  • open $D1, "<:raw", "8k.txt";
  • open $D2, "<:raw", "n.txt";

  • my @dictA = <$D1>;
  • my @dictB = <$D2>;

  • my %hash;

  • grep
  • {
  •     $_ =~s/\r?\n$//;    #去掉换行符
  •     $hash{$_} = 1;      #记录到哈希key中
  • }
  • @dictB;

  • for my $s (@dictA)
  • {
  •     $s =~s/\r?\n$//;
  •     $s =~ /(\w+)\s+(.*+)/;
  •     if (not exists $hash{$1})     #如果哈希中不存在该key
  •     {
  •         print $s,"\n";
  •     }
  • }

TOP

回复 7# 523066680


    多谢多谢

TOP

本帖最后由 523066680 于 2016-8-12 11:31 编辑

回复 8# 949825667@qq.co


    你看的是哪本书? 还有你的代码真的比较丑,上一门学的是什么语言
还有发上来的代码有一个双引号是错的
  • print$word\n";

TOP

回复 9# 523066680


    没有语言基础,看的perl语言入门!至于那个错误,是因为我后来编辑了一下,可能打错了!

TOP

小婶自己解决了

TOP

返回列表