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



#!/COMMUNITY

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




12.02.2012 / 02:03

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


BeitragPERL: Arrays überprüfen und Elemente kombinieren
Seitenanfang
Hi,

ich habe folgendes Problem. Und zwar weiß ich nicht wie ich das anstellen soll.
Ich habe zwei Arrays, in denen jeweils nach Arraynummer zugehörige Werte stehen... z.B. Array1[1] gehört zu Array2[1] usw Array1[n] gehört zu Array2[n].

Nun noch ein drittes Array.

Folgende Ausgangssituation.

In Array1 stehen IP Adressen.
In Array2 stehen die dazugehörigen NETBIOS Namen.
In Array3 stehen die NETBIOS Namen ausgelesen vom Active Directory.

So, nun will ich jeden Wert Array3[n] (mit ner foreach schleife wahrscheinlich) in Array2 überprüfen, ob dieser existiert. Falls ja, soll anhand der Position Array2[n] ermittelt werden, welche IP Addresse aus Array1 zugehörig ist und in eine Variable geschrieben werden.

Ich hoffe mein Problem ist zu verstehen ^^...

auf jeden Fall riesigen Dank im Voraus für jegliche Hilfe!

Danke

Gruß
Benni

P.S.: falls weitere Infos von Nöten sind, geb ich gerne ^^

Datum: 30.11.2005-08:25

Beitragre: PERL: Arrays überprüfen und Elemente kombinieren
Seitenanfang
Hallo greywolve,

Was Du vorhast, geht sicher. Ich finde Deine Idee auch gut, in parallelen Arrays (d.h. unter demselben Index) unterschiedliche Informationen abzulegen.

Hashes könnten eine Abkürzung für Dich sein, ganz ohne for, if's usw.; mußt Du 'mal sehen, ob das in Deinen Programmansatz paßt.

Wenn ich das richtig verstehe, gibt es keine undefinierten Einträge in A3. A2 kann Lücken haben, vielleicht auch A1 (die IPs). Ich würde dann so aufteilen:

1) %active Hash; Index = Netbios vom ActiveDir (bei Dir Werte im Array3); Werte = Netbios (Array2)

2) %ip Hash; ; Index = Netbios vom ActiveDir; Werte = IP-Adressen

Das könnte dann so aussehen (bin faul, daher kopiere ich vom Perl Debugger; na steht für die Netbiosnamen aus dem ActiveDir, n steht für die anderen Netbiosnamen):

DB<1> %active=qw/na1 n1 na2 n2 na3 undef/;
# key value Paare ActiveDir anlegen

DB<2> x \%active
0 HASH(0x1a8f3b0)
'na1' => 'n1'
'na2' => 'n2'
'na3' => 'undef'

# hübsch anzeigen: Active => Netbios

DB<3> %ip=qw/na1 1.2.3.4 na2 1.2.3.5 na3 1.2.3.6/;
# key value Paare IPs anlegen

DB<4> x \%ip
0 HASH(0x1ad50dc)
'na1' => '1.2.3.4'
'na2' => '1.2.3.5'
'na3' => '1.2.3.6'

# hübsch anzeigen

DB<5> print "$active{'na2'} $ip{'na2'}\n";
n2 1.2.3.5

Zeilen <1>, <3> und <5> könnten so auch in Deinem Programm stehen (hab' 'mal das Semikolon extra gesetzt, um das hervorzuheben). Zusätzlich siehst Du in <5> den print-Output.

Hilft Dir das weiter?

Du kannst dann immer noch alle Indizes durchgehen, z.B.:

foreach $index (sort keys %active) {
print "$index $ip{$index}\n";
}

Das ergibt dann:

DB<6> foreach $index (sort keys %active) {print "$index $ip{$index} $active{$index}\n";}

na1 1.2.3.4 n1
na2 1.2.3.5 n2
na3 1.2.3.6 undef

(Ok, undef siehst Du nur im Debugger. Auf dem Screen ist da eben nix.)

Gut, ohne Debugger:

%active=qw/na1 n1 na2 n2 na3 undef/; # key value Paare ActiveDir anlegen

%ip=qw/na1 1.2.3.4 na2 1.2.3.5 na3 1.2.3.6/; # key value Paare IPs anlegen

print "$active{'na2'} $ip{'na2'}\n";

foreach $index (sort keys %active) {
print "$index $ip{$index} $active{$index}\n";
}

Gruß, Michael

Datum: 30.11.2005-22:03

Beitragre: PERL: Arrays überprüfen und Elemente kombinieren
Seitenanfang
Hi, danke für deine recht ausführliche Antwort!

ich hab das mittlerweile gelöst und zwar in ähnlich gleicher Weise wie du es mir vorgeschlagen hast:

(einlesen von 2 identischen[an Anzahl der Elemente] Arrays Array1 und Array2 - überprüfung ob die Elemente aus Array3 in Array2 vorkommen, falls ja, ausgabe zugehöriges Element aus Array1)

Hier nun mein Code:


use strict;
use warnings;

#erstmal das Hash erzeugen
my %IP_Name=();
for(my $i=0;$i<=$#Array1;$i++)
{
$IP_Name{"$Array2[$i]"} = "$Array1[$i]";
}

#Dann nach den Namen suchen und, falls gefunden, ausgeben
foreach(@Array3)
{
if($IP_Name{"$_"})
{
print "$_ wurde gefunden und hat IP: " . $IP_Name{"$_"} . "! \n";
}
}

Datum: 01.12.2005-11:00

-






-
-