使用子例程将参数传递到循环 perl
passing a paramter into a loop perl using a subroutine
我想读取一个文件 1,其中每个单词都包含一个数字表示,例如:
clinton 279
capital 553
fond|fonds 1410
我读了第二个文件,每次我找到一个数字我用相应的词替换它。以上是第二个文件的示例
279 695 696 152 - 574
553 95 74 96 - 444
1410 74 95 96 - 447
我的代码中的问题是它只执行了一次子例程。它只显示:
279 clinton
通常在这个例子中它应该显示 3 个单词,当我添加 print $b;在子例程中它显示不同的数字。
#!/usr/bin/perl
use stricrt;
use warnings;
use autodie;
my @a,my $i,my $k;
my $j;
my $fich_in = "C:\charm\ats\4.con";
my $fich_nom = "C:\charm\ats\ats_dict.txt";
open(FICH1, "<$fich_in")|| die "Problème d'ouverture : $!";
open my $fh, '<', $fich_nom;
#here i put the file into a table
while (<FICH1>) {
my $ligne=$_;
chomp $ligne;
my @numb=split(/-/,$ligne);
my $b=$numb[0];
$k=$#uniq+1;
print "$b\n";
my_handle($fh,$b);
}
sub my_handle {
my ($handle,$b) = @_;
my $content = '';
#print "$b\n";
## or line wise
while (my $line = <$handle>){
my @liste2=split(/\s/,$line);
if($liste2[1]==$b){
$i=$liste2[0];
print "$b $i";}
}
return $i;
}
close $fh;
close(FIC1);
解决类似问题的常用方法是先对 "dictionary" 进行哈希处理,然后遍历第二个文件并在哈希 table:
中搜索替换项
#!/usr/bin/perl
use warnings;
use strict;
my $fich_in = '4.con';
my $fich_nom = 'ats_dict.txt';
open my $F1, '<', $fich_in or die "Problème d'ouverture $fich_in : $!";
open my $F2, '<', $fich_nom or die "Problème d'ouverture $fich_nom : $!";;
my %to_word;
while (<$F1>) {
my ($word, $code) = split;
$to_word{$code} = $word;
}
while (<$F2>) {
my ($number_string, $final_num) = split / - /;
my @words = split ' ', $number_string;
$words[0] = $to_word{ $words[0] } || $words[0];
print "@words - $final_num";
}
我想读取一个文件 1,其中每个单词都包含一个数字表示,例如:
clinton 279
capital 553
fond|fonds 1410
我读了第二个文件,每次我找到一个数字我用相应的词替换它。以上是第二个文件的示例
279 695 696 152 - 574
553 95 74 96 - 444
1410 74 95 96 - 447
我的代码中的问题是它只执行了一次子例程。它只显示:
279 clinton
通常在这个例子中它应该显示 3 个单词,当我添加 print $b;在子例程中它显示不同的数字。
#!/usr/bin/perl
use stricrt;
use warnings;
use autodie;
my @a,my $i,my $k;
my $j;
my $fich_in = "C:\charm\ats\4.con";
my $fich_nom = "C:\charm\ats\ats_dict.txt";
open(FICH1, "<$fich_in")|| die "Problème d'ouverture : $!";
open my $fh, '<', $fich_nom;
#here i put the file into a table
while (<FICH1>) {
my $ligne=$_;
chomp $ligne;
my @numb=split(/-/,$ligne);
my $b=$numb[0];
$k=$#uniq+1;
print "$b\n";
my_handle($fh,$b);
}
sub my_handle {
my ($handle,$b) = @_;
my $content = '';
#print "$b\n";
## or line wise
while (my $line = <$handle>){
my @liste2=split(/\s/,$line);
if($liste2[1]==$b){
$i=$liste2[0];
print "$b $i";}
}
return $i;
}
close $fh;
close(FIC1);
解决类似问题的常用方法是先对 "dictionary" 进行哈希处理,然后遍历第二个文件并在哈希 table:
中搜索替换项#!/usr/bin/perl
use warnings;
use strict;
my $fich_in = '4.con';
my $fich_nom = 'ats_dict.txt';
open my $F1, '<', $fich_in or die "Problème d'ouverture $fich_in : $!";
open my $F2, '<', $fich_nom or die "Problème d'ouverture $fich_nom : $!";;
my %to_word;
while (<$F1>) {
my ($word, $code) = split;
$to_word{$code} = $word;
}
while (<$F2>) {
my ($number_string, $final_num) = split / - /;
my @words = split ' ', $number_string;
$words[0] = $to_word{ $words[0] } || $words[0];
print "@words - $final_num";
}