Schrift
[thread]6097[/thread]

Hash Zugriff und Speicherung in Variablen

Leser: 1


<< >> 4 Einträge, 1 Seite
Spuerhase
 2004-02-26 18:11
#80350 #80350
User since
2004-02-26
1 Artikel
BenutzerIn
[Homepage] [default_avatar]
Liebe Gemeinde,

ich habe da mal ein Problem.
Ich habe ein Hash angelegt mit 5 Schluesseln und Werten.

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?

Über Hilfe wäre ich sehr dankbar.

Michi
pq
 2004-02-26 20:02
#80351 #80351
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
also wie dein hash aussieht, wissen wir. aber was genau kommt vom user als eingabe, und was
genau willst du vergleichen? etwa if ($logname{$eingabe_key} eq $eingabe_value)?
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
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
Crian
 2004-02-27 16:11
#80353 #80353
User since
2003-08-04
5872 Artikel
ModeratorIn
[Homepage]
user image
Ich kann mir im Moment zwei sinnvolle Dinge vorstellen, die Du vielleicht bezwecken möchtest:

1) Dein Hash enthält Usernamen als Schlüssel und Passworte als Werte (danach sieht es aber nicht aus)

2) Dein Hash enthält Usergruppen als Schlüssel und Usernamen als Werte.
Das könnte Sinn machen. Allerdings solltest Du dann nicht nur einzelne Werte speichern, sondern Listen.


Dazu könnte dann dieser Code passen:

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
32
33
34
35
36
37
38
39
40
#/usr/bin/perl
use strict;
use warnings;


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

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

#
# Bestimmen aller passenden Werte:
#
my @keys;
for my $group (keys %logname) {
   my @k = grep { $_ eq $user_name } @{$logname{$group}};
push @keys, $group if scalar @k;
}

#
# Begrüßung mit passenden Gruppen oder Ablehnung:
#
if (scalar @keys > 0) {
   print "Willkommen ", join(', ', @keys), " $user_name!\n";
}
else {
   print "'$user_name', Sie sind dem System leider nicht bekannt.\n";
}


Edit:  ABC1 bekommt zu hören: "Willkommen Tester ABC1!", Crian bekommt zu hören: "Willkommen Admin Crian!" und Multi bekommt zu hören: "Willkommen Tester, Admin Multi!". Unbekannte wie etwa sdaf bekommen "'sdaf', Sie sind dem System leider nicht bekannt." zu hören\n\n

<!--EDIT|Crian|1077891357-->
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
<< >> 4 Einträge, 1 Seite



View all threads created 2004-02-26 18:11.