perlunity.de - PERL | JAVASCRIPT | PHP | MySQL | APACHE



#!/COMMUNITY

Members: 5374
davon online: 1
weitere User: 23
Click for quality!




11.02.2012 / 07:42

Community-Member werden   |   Paßwort vergessen   |   OnlineMonitor (1) Wer ist online ... OnlineMonitor starten !
     

 

Home


PERLscripts


PHPscripts


JAVAscripts


Hilfreiches


Links2www


Newscenter


Community


Interna




Community  »  Perl: Allgemeines Forum zur Themenübersicht Themensuche Themenansicht in Thread-Modus


BeitragMehrere Hashes...
Seitenanfang
Hallo,
ich möchte die unten stehenden Daten in einer HTML Tabelle anzeigen.

Wie kann ich die Daten in eine Hash (Schlüssel:username), Subhash (Schlüssel: hostname) und als Werte die jeweiligen Rechte zum usernamen/hostnamen speichern und entsprechend ausgeben?

Weiss jemand eine Lösung?


# Ausgabe als HTML Tabelle:
# +-----------+---------+---------+
# | username | hostname| rechte |
# +-----------+---------+---------+
# | mschulz | lina | sysadm |
# | | | sysop |
# | | | smbadm |
# | +---------+---------+
# | | lara | sysadm |
# | +---------+---------+
# | | xenia | sysadm |
# | | | sysop |
# | | | oracle |
# | | | mysql |
# +-----------+---------+---------+
# | sysadm | lina | sysadm |
# | +---------+---------+
# | | lara | sysadm |
# | +---------+---------+
# | | xenia | sysadm |
# +-----------+---------+---------+

# Daten:

__DATA__
mschulz|lina|sysadm,sysop,smbadm
mschulz|lara|sysadm
mschulz|xenia|sysadm,sysop,oracle,mysql
sysadm|lina|sysadm
sysadm|lara|sysadm
sysadm|xenia|sysadm

Datum: 14.12.2005-23:18

Beitragre: Mehrere Hashes...
Seitenanfang
Hi,

wo ist Dein bisheriger Code? Was hat erselbst bisher versucht?

Gruss,
svenXY

Datum: 15.12.2005-09:06

Beitragre: Mehrere Hashes...
Seitenanfang
Das ist der Code, nur werden die letzten Daten (Rechte) überschrieben und erhalte immer nut sysadm.


#!/usr/bin/perl

my (%HASH);
while (<DATA>) {
chomp;
my @line=split(/\|/, $_);
my $key=$line[0];
my $sub=$line[1];
shift @line;
shift @line;
$HASH{$key}=$sub;
$SUBHASH{$sub}="@line";
}

foreach my $keys(sort keys %HASH) {
print $keys.":\n";
foreach (sort keys %SUBHASH) {
print $_." - ".$SUBHASH{$_}."\n";
}
}

__DATA__
mschulz|lina|sysadm,sysop,smbadm
mschulz|lara|sysadm
mschulz|xenia|sysadm,sysop,oracle,mysql
sysadm|lina|sysadm
sysadm|lara|sysadm
sysadm|xenia|sysadm

Habe ein Howto zu Perl & Hash gefunden. Will sehen das ich das mit dem Punkt "Access and print a reference to a hash of hashes" irgend wie hinbekomme.

Gruß
erselbst

Datum: 17.12.2005-17:50

Beitragre: Mehrere Hashes...
Seitenanfang
Ich hab es :-)

Die HTML-Tabelle baue ich mir drumm herum. Wenn Du eine einfachere, besere Lösung weiss - immer her damit.


#!/usr/bin/perl

while (<DATA>) {
my ($username, $hostname, $rights) = split(/\|/, $_);
if (defined $HASH{$username}) { $HASH{$username}="$HASH{$username}:$hostname"; }
else { $HASH{$username}=$hostname; }
if (defined $SUBHASH{$username}{$hostname}) { $SUBHASH{$username}{$hostname}="$SUBHASH{$username}{$hostname}:$rights"; }
else { $SUBHASH{$username}{$hostname}=$rights; }
}

foreach my $keys(sort (keys %HASH)) {
print $keys."\n";
foreach my $sub( split(/:/, $HASH{$keys}) ) {
print "\t".$sub."\n";
foreach my $subsub( split(/\s*,\s*/, $SUBHASH{$keys}{$sub}) ) {
print "\t\t".$subsub."\n";
}
}
}

__DATA__
mschulz|lina|sysadm,sysop,smbadm
mschulz|lara|sysadm
mschulz|xenia|sysadm,sysop,oracle,mysql
sysadm|lina|sysadm
sysadm|lara|sysadm
sysadm|xenia|sysadm

Gruß
erslebst

Datum: 18.12.2005-16:08

Beitragre: Mehrere Hashes...
Seitenanfang
Hi,
sieht schon recht gut aus.
Hier meine Version (schon mit dem HTML):

#!/usr/bin/perl -w

use strict;
my %HASH;

while (<DATA>) {
chomp;
my ( $username, $hostname, $rights ) = split( /\|/, $_ );
$HASH{$username}{$hostname} = [ split(/,/, $rights) ];
}

print '<table border=0>';

foreach my $user ( sort ( keys %HASH ) ) {
my $seen_user;
foreach my $host (keys %{$HASH{$user}} ) {
print "\n<tr>\n";
printf "\t<td>%s</td>\n\t<td>%s</td>\n", ($seen_user++)?'nbsp;':$user, $host;
print "\t<td>", join("<br>", @{$HASH{$user}{$host}}), "</td>\n</tr>";
}
}

print '</table>';

__DATA__
mschulz|lina|sysadm,sysop,smbadm
mschulz|lara|sysadm
mschulz|xenia|sysadm,sysop,oracle,mysql
sysadm|lina|sysadm
sysadm|lara|sysadm
sysadm|xenia|sysadm


Gruss,
svenXY

Datum: 19.12.2005-10:35

Beitragre: Mehrere Hashes...
Seitenanfang
noch ein wenig verbessert:

#!/usr/bin/perl -w

use strict;
my %HASH;

while (<DATA>) {
chomp;
my ( $username, $hostname, $rights ) = split( /\|/, $_ );
$HASH{$username}{$hostname} = [ split(/,/, $rights) ];
}

print '<table border=1>', "\n";
print '<tr><th>User</th><th>Host</th><th>Role</th></tr>', "\n";

foreach my $user ( sort ( keys %HASH ) ) {
my $seen_user;
foreach my $host (keys %{$HASH{$user}} ) {
print "\n<tr valign=top>\n";
printf "\t<td>%s</td>\n\t<td>%s</td>\n", ($seen_user++)?' ':$user, $host;
print "\t<td>", join("<br>", @{$HASH{$user}{$host}}), "</td>\n</tr>";
}
}

print '</table>';

__DATA__
mschulz|lina|sysadm,sysop,smbadm
mschulz|lara|sysadm
mschulz|xenia|sysadm,sysop,oracle,mysql
sysadm|lina|sysadm
sysadm|lara|sysadm
sysadm|xenia|sysadm

Datum: 19.12.2005-11:11

Beitragre: Mehrere Hashes...
Seitenanfang
Das ist gut, so werde ich es machen.

Die dritte Schleife in meiner Version hätte ich ja auch mit join lösen können.

Naja, ich gehe immer über Moskau nach Paris :-)

Vielen Dank...

Gruß
erselbst

Datum: 19.12.2005-21:56

-






-
-