Thread Hash Zugriff und Speicherung in Variablen (3 answers)
Opened by Spuerhase at 2004-02-26 18:11

Crian
 2004-02-27 13:23
#80352 #80352
User since
2003-08-04
5872 Artikel
ModeratorIn
[Homepage]
user image
[quote=Spuerhase,26.02.2004, 17:11]Für einen Namensvergleich möchte ich nur die Schluessel auslesen und mit der Eingabe des Users vergleichen.
%logname(Tester => "ABC1", Admin=>"DEF3");usw.

Hierzu möchte ich die Schluessel des Hashes auslesen (funktioniert auch mit @liste=keys(%logname);und in einzelne Variablen stecken. (Funktioniert nicht )

Wenn Übereinstimmung vorhanden soll in zweiter Instanz der zugehörige Schluesselwert überprüft werden. z.b. Hat Tester auch ABC1 eingegeben.

Wie kann ich die einzelnen Elemente in einzelne Variablen stecken: Oder hat vielleicht jemand eine ganz andere Idee?[/quote]
Es tut mir leid, aber mir ist nicht ganz klar, was Du möchtest.

"Schlüssel des Hashes auslesen"

--> Die Schlüssel sind im Array keys %logname

"in einzelne Variablen stecken"

??? Wen, die Schlüssel?

my $special_key = 'Admin';
print "Admin ist ", $logname{$special_key}, "\n";


So?

Wenn welche Übereinstimmung vorhanden ist?

Ich rate mal: Der Benutzer gibt in einer Abfrage (die Du uns nicht gezeigt hast) seinen Kürzel ein, und wenn der als [s]Schlüssel[/s] Wert im Hash vorhanden ist, soll [s]der Wert überprüft werden[/s] was passieren?

Überprüft womit? Mit einer weiteren Eingabe des Benutzers?

Ist alles unklar, ich poste trotzdem mal Code, vielleicht wird die Sache dann ja klarer, wenn Du sagen kannst, was alles nicht stimmt :D

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#/usr/bin/perl
use strict;
use warnings;


# Hash mit erlaubten Werten:
my %logname = (Tester => "ABC1", Admin => "DEF3");

my $user_name = <>;
chomp($user_name);

#
# Dieser Codeblock testet, ob "Tester" oder "Admin" eingegeben wurde:
#
if (exists $logname{$user_name}) {
   print "Hallo $user_name!\n";
}
else {
   print "Sie sind nicht bekannt\n";
}

#
# Dieser Codeblock testet, ob "ABC1" oder "DEF3" eingegeben wurde:
#
my @keys = grep { $logname{$_} eq $user_name } keys %logname;
if (scalar @keys > 0) {
   print "Willkommen $keys[0] $user_name!\n";
}
else {
   print "Sie sind nicht bekannt\n";
}


Bei den Ausgaben ist zu beachten, dass sich die erste Zeile immer auf den ersten Test, die zweite auf den zweiten Test bezieht.

Ausgabe bei der Eingabe von "Tester":

Code: (dl )
1
2
Hallo Tester!
Sie sind nicht bekannt


Ausgabe bei der Eingabe von "ABC1":

Code: (dl )
1
2
Sie sind nicht bekannt
Willkommen Tester ABC1!


Ausgabe bei der Eingabe von "DEF3":

Code: (dl )
1
2
Sie sind nicht bekannt
Willkommen Admin DEF3!


Ausgabe bei der Eingabe von Unsinn, etwa "xxx":

Code: (dl )
1
2
Sie sind nicht bekannt
Sie sind nicht bekannt


Ich hoffe, Du kannst damit irgendwas anfangen. Bitte nochmal nachfragen oder genauer spezifizieren was Du willst...
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite

View full thread Hash Zugriff und Speicherung in Variablen