2016-07-29 16 views
1

ハッシュのファイルから単語の存在をチェックし、そうであれば対応するハッシュキーと値を表示しようとしています。Perlは配列の内容をハッシュ値と比較します

これまでのところ、私は値がスクリプトに与えられている配列でそれを行うことができました。

私は外部ファイル(ここではFILEDEUX)から、この配列ワードに値として与えるための方法を見つけることができません。 私を正しい方向に向けることができますか?

(私の問題を説明する私の方法を修正することを躊躇しないでください。)

#!/usr/bin/perl 
use v5.10; 
use strict; 
use warnings; 
my $hashtable = $ARGV[0]; 
my $textecompare = $ARGV[1]; 
open FILE,"<$hashtable" or die "Could not open $hashtable: $!\n"; 
open FILEDEUX,"<$textecompare" or die "Could not open $textecompare: $!\n"; 


    while (my $line = <FILE>) 
    { 
     chomp($line); 
     my %elements = split(" ",$line); 

     my @motcherches = qw/blop blup blip blap/; 
     foreach my $motcherches (@motcherches) { 

      while ((my $key, my $value) = each (%elements)) { 
       # Check if element is in hash : 
       say "$key , $value" if (exists $elements{$motcherches}) ; 
      } 
     } 
    } 

close FILE; 
close FILEDEUX; 

EDIT:(%elementsハッシュに変換)の例入力

FILE

Zieler player 
Chilwell player 
Ulloa player 
Mahrez player 
Ranieri coach 

= ========================================== =================

すぐに別のに続いて、今回Zielerはそれを保つために少しシャープにしなければならなかったされて保存

motcherches配列に変換)FILEDEUX

一つ。 Izaguirreは、レスターのウィンガーがあまりにも簡単にあきらめてしまったが、彼は左サイドを下って彼を打ち負かすことによって、彼の薬の味をMahrezに与える。 クラウディオ・ラニエリは、これまでの彼の側から見たものに満足しています。

============================================== ===============================

予想される出力:

Zieler player 
Mahrez player 
Ranieri coach 
+1

'使用warnings'は、あなたのシェバングライン上の-w''に似ています。それらのうちの1つだけが必要です(そして、ほとんどの人は ''警告を使う '')。 –

+0

それを逃した、ありがとう! – Azaghal

答えて

1
use strict; 
use warnings; 
use feature qw/ say /; 

# Read in your paragraph of text here: 
open my $text, '<', 'in.txt' or die $!; 

my %data; 
while(<$text>){ 
    chomp; 
    $data{$_}++ for split; # by default split splits on ' ' 
} 

my %players; 
while(<DATA>){ 
    chomp; 
    my @field = split; 
    say if $data{$field[0]}; 
} 


__DATA__ 
Zieler player 
Chilwell player 
Ulloa player 
Mahrez player 
Ranieri coach 
+0

それは素晴らしい作品です! – Azaghal

+1

@Baptiste - 素晴らしい。スクリプト内のデータを読み込むために '__DATA__'を使うのはあまり一般的ではないので、答えをそのまま(編集提案を拒否する) – fugu

1

すべては大丈夫ですが、追加しますあなたのプログラムでchomp

while (my $line = <FILE>) 
    { 
    chomp($line); 
    my %elements = split(" ",$line); 
+0

私はあなたが私の問題を正しく理解しているかどうか分かりません。私が苦労しているのは、 'my @motcherches = qw/blop blup blip blap /;'行: です。他のファイルと同じように、値として「blop blup blip blap」を使用するのではなく、ファイルからの単語を使用するようにしてください。今まで私が試みたことはエラーを返しました。 – Azaghal

+0

@Baptiste入力例を追加してください。 – mkHun

+0

オリジナルの投稿を編集しました。 – Azaghal

関連する問題