doppelte datensätze in einer liste aus listen suchen und ausgeben

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • doppelte datensätze in einer liste aus listen suchen und ausgeben

    hey

    das nachfolgende skript soll aus einer liste in welcher viele listen stehen alle doppelten datensätz herausfinden und ausgeben, damit sie anhand der ID gefunden und gelöscht werden können
    allerdings erhalte ich 1. alle datensätze was ich gar nicht will, 2. auch die datensätze in welchen nur ein argument zutrifft was ich auch nicht will und 3. wie verhindere ich das der eigene datensatz mit erkannt wird

    mein skript:

    #!/usr/bin/perl -w

    use strict;

    my @treffer = "";

    my @liste1 = ("1", "Alex", "1234", "Lottestr", "Berlin");
    my @liste2 = ("2", "Alexander", "4352", "Lotasdas", "Bern");
    my @liste3 = ("3", "Hardy", "122234", "Lotestr", "Suhl");
    my @liste4 = ("4", "Peter", "224352", "Lotsdas", "Berlin");
    my @liste5 = ("5", "Alex", "125634", "Lottestr", "Berlinchen");
    my @liste6 = ("6", "Alex", "1234", "Lottestr", "Berlin");
    my @liste7 = ("7", "Hardy2", "1242234", "Lotestr", "Sahl");
    my @liste8 = ("8", "Peter2", "2243452", "Lotsdas", "Berlin");


    my @alle_listen = ([@liste1],
    [@liste2],
    [@liste3],
    [@liste4],
    [@liste5],
    [@liste6],
    [@liste7],
    [@liste8]);


    my $suchendes_element = "";
    my $vergleichendes_element = "";


    foreach $suchendes_element (0..$#alle_listen)
    {
    foreach $vergleichendes_element (0..$#alle_listen)
    {
    if ( $alle_listen[$suchendes_element]->[1] eq $alle_listen[$vergleichendes_element]->[1]
    && $alle_listen[$suchendes_element]->[4] eq $alle_listen[$suchendes_element]->[4] )
    {
    print "$alle_listen[$suchendes_element]->[0]";
    print " - $alle_listen[$suchendes_element]->[1]";
    print " - $alle_listen[$suchendes_element]->[4]\n";
    }
    }
    }


    dies ist die ausgabe welche ich erhalte:

    1 - Alex - Berlin
    1 - Alex - Berlin
    1 - Alex - Berlin
    2 - Alexander - Bern
    3 - Hardy - Suhl
    4 - Peter - Berlin
    5 - Alex - Berlinchen
    5 - Alex - Berlinchen
    5 - Alex - Berlinchen
    6 - Alex - Berlin
    6 - Alex - Berlin
    6 - Alex - Berlin
    7 - Hardy2 - Sahl
    8 - Peter2 - Berlin

    ------------------------------------------------------
    Hardy Weindorf
    gestern standen wir am abgrund heute sind wir einen schritt weiter

  • #2
    ersetz mal deinen foreach teil mit dem folgenden, dann bekommst du die doppelten datensätze.
    Code:
    foreach $suchendes_element (0..$#alle_listen) {
      foreach $vergleichendes_element (0..$#alle_listen) {
        if (($alle_listen[$suchendes_element]->[1] eq $alle_listen[$vergleichendes_element]->[1]) &&
        ($alle_listen[$suchendes_element]->[4] eq $alle_listen[$vergleichendes_element]->[4]) &&
        ($alle_listen[$suchendes_element]->[0] ne $alle_listen[$vergleichendes_element]->[0])) {
          print "$alle_listen[$suchendes_element]->[0]";
          print " - $alle_listen[$suchendes_element]->[1]";
          print " - $alle_listen[$suchendes_element]->[4]\n";
        }
      }
    }
    du hattest ausserdem noch einen tippfehler, denn du hast in deiner if folgendes stehen gehabt.
    Code:
    $alle_listen[$suchendes_element]->[4] eq $alle_listen[$suchendes_element]->[4]
    das liefert dir zwar true zurück, aber ich gehe mal davon aus, dass du dich hier vertan hast

    HTH

    Kommentar


    • #3
      danke

      danke für den tip

      manchmal sieh den wald vor bäumen nicht!
      gestern standen wir am abgrund heute sind wir einen schritt weiter

      Kommentar

      Lädt...
      X