Anzeige:
Ergebnis 1 bis 9 von 9

Thema: PERL: Arrays überprüfen und Elemente kombinieren

  1. #1
    Registrierter Benutzer
    Registriert seit
    04.10.2005
    Beiträge
    15

    PERL: Arrays überprüfen und Elemente kombinieren

    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. Wie in der Überschrift zu lesen: das script ist in PERL geschrieben ... ... falls noch Infos nötig sind zum helfen, einfach fragen... danke!
    Geändert von greywolve (29-11-2005 um 16:55 Uhr)

  2. #2
    Registrierter Benutzer
    Registriert seit
    19.08.2004
    Beiträge
    404
    hi,

    also Array1 und Array2 solltest Du vielleicht gegen ein Hash, also ein assoziatives Array ersetzen.
    Ein Hash speichert Schlüssel-Wert Paare...


    PHP-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";
      }



    Wichtig ist, dass die Anzahl der Elemente in Array1 und Array2 wirklich identisch ist...

    ungetestet, Michael

  3. #3
    Registrierter Benutzer
    Registriert seit
    04.10.2005
    Beiträge
    15
    Hi,

    danke für die schnelle Antwort...

    Werde ich gleich ma morgen auf Arbeit ausprobieren ...

    DANKE ... mal sehen obs klappt ^^


    Gruß

    Benni

  4. #4
    Registrierter Benutzer
    Registriert seit
    04.10.2005
    Beiträge
    15
    Hi, also habe das Script mal ausprobiert und es funktioniert nicht ...

    habe darauf das script auf verschiedene Arten abzuändern, aber hilf auch nichts. Ich weiß einfach nicht mehr weiter ...

    Ich hoffe es findet wer ne Lösung. Das wäre echt super.

    Bis dahin danke für dein / euer Bemühen!

    Gruß
    Benni

  5. #5
    Registrierter Benutzer
    Registriert seit
    19.08.2004
    Beiträge
    404
    _was_ funktioniert nicht? Bei mir geht das einwandfrei:


    PHP-Code:
    #!/usr/bin/perl

    use strict;
    use 
    warnings;

    # Liste mit IP Adressen
    my @Array1 = (
      
    '192.168.0.1',
      
    '192.168.0.2',
      
    '192.168.0.3',
      
    '192.168.0.4',
      
    '192.168.0.5'
      
    );

    # Liste mit zugehörigen Namen
    my @Array2 = (
      
    'client01',
      
    'client02',
      
    'client03',
      
    'client04',
      
    'client05'
      
    );

    #Liste mit Namen aus Active Directory
    my @Array3 = (
      
    'client03',
      
    'client01'
      
    );

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

    foreach(@
    Array3)
    {
      if(
    $IP_Name{"$_"})
      {
        print 
    "$_ wurde gefunden! IP Adresse ist: " $IP_Name{"$_"} . "! \n";
      }



    Ausgabe ist:
    Code:
    ~ $ perl test.pl
    client03 wurde gefunden! IP Adresse ist: 192.168.0.3! 
    client01 wurde gefunden! IP Adresse ist: 192.168.0.1!

  6. #6
    Registrierter Benutzer
    Registriert seit
    04.10.2005
    Beiträge
    15
    Hmm, dann wird das wohl daran liegen, wie die Daten im Array gespeichert sind...

    Hmm obwohl man eingentlich keinen Unterschied sieht, denke ich das sich da irgendwo nen Leerzeichen eingechlichen hat ... ich schau da gleich ma nach..

    DANKE

  7. #7
    Registrierter Benutzer
    Registriert seit
    04.10.2005
    Beiträge
    15
    So hab das nochmals überprüft...

    und festgestellt, das im Array2 mit den Namen Leerzeichen enthalten sind ...

    Gibt es irgendwie ne Möglichkeit, diese beim Einlesen ins Array, die Leerzeichen onthefly zu entfernen??? ... zur Zeit lese ich eine Datei und speichere den Inhalt ins Array und dem Anschein nach sind bei beiden, Array2 und Array3, Unterschiede. Bei Array2 definitiv Leerzeichen (und Zeilenumbruch), bei Array3(Zeilenumbruch).

    Code:
    my $filehndl = '<input>';
    my $file_path = 'scannet.txt';
    
    open($file_hndl, "<$file_path") ||
     die("File not found: $file_path ($!)\n");
    foreach (<$file_hndl>) {
      ($col1, $col2, $col3, $col4, $col5) = split(/:/, $_);
      $col4 =~ s/ //g;
      $col4 =~ tr/\n\r//;
      push(@col1, $col1);
      push(@col2, $col2);
      push(@col3, $col3);
      push(@col4, $col4);
      push(@col5, $col5);
    }
    close($file_hndl);
    
    my $file_pathall = 'group.tmp';
    
    open(GROUP, "$file_pathall") ||
     die("File not found: $file_pathall ($!)\n");
    @all=<GROUP>;
    close(GROUP);
    	
    	# Hash erzeugen (IP und NetBios-Name
    	my %IP_Name=();
    	for(my $i=0;$i<=$#col1;$i++)
    	{
    		$IP_Name{"$col4[$i]"} = "$col1[$i]";
    	}
    
    	# Nach dem NetBios-Name suchen und IP ausgeben
    	foreach(@all)
    	{
    		if($IP_Name{"$_"})
    		{
    			print "$_ wurde gefunden und hat IP: " . $IP_Name{$IP_Name[$_]} . "! \n";
    		}
    	}
    hier ein Auszug meiner Datei ... @col1 IP-Adressen, @col4 UserNamen, @all UserNamen nach denen gesucht werden soll.

    Danke für deine Hilfe.

  8. #8
    Registrierter Benutzer
    Registriert seit
    04.10.2005
    Beiträge
    15
    P.S: So sieht ein Eintrag der scannet.txt aus:

    Code:
    192.168.103.4:OPPPDSWXP004 :<server>:SORBODEL       :00-30-05-18-dd-b4
    PS: hab das nun so hinbekommen, dass ich die Datei vorher bearbeite und die Leerzeichen entferne...

    Nun sieht sie wie folgt aus:
    Code:
    192.168.103.4:OPPPDSWXP004 :<server>:SORBODEL:00-30-05-18-dd-b4
    aber geht immer noch nicht ...
    in der group.tmp, stehen die Namen untereinander:
    Code:
    NAME1
    NAME2
    ...
    Geändert von greywolve (30-11-2005 um 09:32 Uhr)

  9. #9
    Registrierter Benutzer
    Registriert seit
    04.10.2005
    Beiträge
    15
    So ...

    das ganze hat sich nun erledigt und ich könnt mich ma wieder aufregen!

    Irgendwie weiß Windows auch nicht so ganz was es will.

    Die Datei für das erste und zweite Array ist ein DOS Kommando!
    Die Datei für das dritte Array is auch ein DOS Kommando!

    Da würde man doch meinen, das die beiden so ziemlich das selbe ausgeben...

    Aber falsch gedacht, die Daten im zweiten Array, die Namen, waren die ganze Zeit identisch mit denen des dritten. Nur eins wurde übersehen, sie müssen eine unterschiedliche Formatierung haben??? Weiß ich nicht genau, wird aber wohl so sein, wobei ich mir da nicht denken kann, daß PERL da große Unterschiede macht???

    Jedenfalls erzeuge ich nun die erste Datei für die ersten beiden Arrays per shell-script (Cygwin-Bash) und siehe da, obwohl ich da exakt!!!!!! das gleiche ausführe, klappt alles. Weiß der Teufel wieso...

    Bisschen seltsam... bisschen umständlich.... aber hauptsache es funktioniert!

    Dann Danke nochmal für die Hilfe ...

    Gruß
    Benni

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •