2016-07-29 12 views
1

Ich versuche, die Existenz von Wörtern aus einer Datei in einem Hash zu überprüfen, und wenn ja, den entsprechenden Hash-Schlüssel und Wert anzuzeigen.Perl Array-Inhalt zu Hash-Werten vergleichen

Bisher konnte ich es mit einem Array tun, welche Werte im Skript angegeben sind.

Ich kann einen Weg finden, um Werte zu diesem Array Wörter aus einer externen Datei (hier FILEDEUX) zu geben. Können Sie mir in die richtige Richtung zeigen?

(Bitte zögern Sie nicht meine Art und Weise zu erklären, mein Problem zu beheben.)

#!/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: Beispiel Eingänge

FILE (in %elements Hash umgewandelt)

Zieler player 
Chilwell player 
Ulloa player 
Mahrez player 
Ranieri coach 

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

FILEDEUX (umgewandelt in motcherches Array)

One speichern wird schnell gefolgt von einer anderen, und diesmal Zieler hatte etwas schärfer zu sein, um es zu halten. Izaguirre gibt Mahrez einen Vorgeschmack auf seine eigene Medizin, indem er ihn am Ende der linken Flanke schlägt, obwohl der Leicester-Flügelspieler viel zu leicht aufgibt. Claudio Ranieri wird glücklich sein mit dem, was er bisher von seiner Seite gesehen hat.

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

Erwartete Ausgabe:

Zieler player 
Mahrez player 
Ranieri coach 
+1

'Verwendung warnings' ähnelt' -w' auf shebang Linie. Sie brauchen nur einen von ihnen (und die meisten Leute würden mit den 'Warnungen verwenden 'gehen). –

+0

Verpasst, danke! – Azaghal

Antwort

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

Danke, es funktioniert super! – Azaghal

+1

@Baptiste - Großartig. Ich behalte die Antwort so, wie sie ist (Ablehnung Ihres Bearbeitungsvorschlags), nur weil "__DATA__" zum Einlesen von Daten innerhalb eines Skripts verwendet wird – fugu

1

Alles ist in Ordnung, aber hinzufügen die chomp in Ihrem Programm

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

Ich bin mir nicht sicher, ob du mein Problem richtig verstanden hast: Was ich damit zu tun habe, ist die 'my @motcherches = qw/blop Blip Blip Blap /;' Zeile: es funktioniert super, wie es ist, aber ich möchte nicht "blop blup blip blap" als Werte, sondern Worte aus einer Datei, wie ich es mit der anderen Datei gemacht habe. Was ich bisher versucht habe, hat Fehler zurückgegeben. – Azaghal

+0

@Baptiste Bitte Beispieleingabe hinzufügen. – mkHun

+0

Ich habe meinen ursprünglichen Beitrag bearbeitet. – Azaghal

Verwandte Themen