标题: [问题求助] 大婶帮忙看看单词比对的Perl小程序有木有什么问题啊 [打印本页]
作者: 949825667 时间: 2016-8-12 09:28 标题: 大婶帮忙看看单词比对的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- 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\./){
-
- ($word,$trans)=split(/\s+/,$line1);
- $dic{$word}=$trans;
- }
-
- while(<$sp_n>){
- chomp;
- $line2=$_;
- $sp_w{$line2}=1;
-
-
- if(exists $dic{$line2}){
- print "$line2\n";
-
- }
- }
- }
复制代码
作者: 949825667 时间: 2016-8-12 09:45
看着自己写的代码,真是不好意思!ugly!!!
作者: 949825667@qq.co 时间: 2016-8-12 10:33
自己解决了
作者: 949825667@qq.co 时间: 2016-8-12 10:44
本帖最后由 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";
}
#}
}
}
作者: 523066680 时间: 2016-8-12 10:56
本帖最后由 523066680 于 2016-8-12 11:03 编辑
回复 4# 949825667@qq.co
楼上注册了两个号?到我的论坛吧,哈哈
code-by.org
作者: 949825667@qq.co 时间: 2016-8-12 11:02
回复 5# 523066680
原来的账号忘记了,后来又想起来了
作者: 523066680 时间: 2016-8-12 11:21
本帖最后由 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";
- }
- }
作者: 949825667@qq.co 时间: 2016-8-12 11:24
回复 7# 523066680
多谢多谢
作者: 523066680 时间: 2016-8-12 11:25
本帖最后由 523066680 于 2016-8-12 11:31 编辑
回复 8# 949825667@qq.co
你看的是哪本书? 还有你的代码真的比较丑,上一门学的是什么语言
还有发上来的代码有一个双引号是错的
作者: 949825667@qq.co 时间: 2016-8-12 11:42
回复 9# 523066680
没有语言基础,看的perl语言入门!至于那个错误,是因为我后来编辑了一下,可能打错了!
作者: wskwfkbdn 时间: 2016-8-12 14:43
小婶自己解决了
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |