Anzeige:
Ergebnis 1 bis 14 von 14

Thema: doppelte Datensätze finden

  1. #1
    Registrierter Benutzer
    Registriert seit
    22.03.2005
    Beiträge
    16

    Exclamation doppelte Datensätze finden

    hallo,

    mein Problem ist folgendes. Ich habe z.b. 2 Dateien die zum Teil gleiche Datensätze enthalten. Nun möchte ich diese doppelten Daten finden. Eine Möglichkeit währe sicherlich den ersten Datensatz von einer Datei auszulesen und dann mit diesem alle Datensätze der zweiten Datei zu durchlaufen, um zu schauen wo es eine Übereinstimmung gibt. Dies wird dann halt auch mit dem zweiten, dritten,.... Datensatz der ersten Datei gemacht. Allerdings ist das nicht gerade effektiv wenn man 100.000 Datensätze hat -> es dauert einfach zu lange. Daher würde ich mich freuen, wenn ihr einige Ideen/Vorschlage dazu hättet.

  2. #2
    Registrierter Benutzer
    Registriert seit
    19.08.2004
    Beiträge
    404
    sind die Datensätze in den Dateien irgendwie sortiert?
    Dann könntest Du z.B. eine Binärsuche anwenden...

  3. #3
    Registrierter Benutzer
    Registriert seit
    22.03.2005
    Beiträge
    16
    hmm ... daran hab ich auch schon gedacht nur leider sind die Daten nicht sortiert und wenn man sie sortieren würde währe mit Sicherheit der Geschwindigkeitsvorteil dahin

  4. #4
    Registrierter Benutzer
    Registriert seit
    26.12.2001
    Beiträge
    228
    ka, wie effektiv das ist, aber man könnt das mal mit perl versuchen. Und dann die eine Datei in einen hash einlesen.
    pornstars-online.de

  5. #5
    Registrierter Benutzer
    Registriert seit
    15.04.2005
    Beiträge
    105
    wenn dein ram gross genug ist für datei, könntest du die datei in einen array kopieren.

    gruß baumi

  6. #6
    Registrierter Benutzer
    Registriert seit
    26.12.2001
    Beiträge
    228
    Zitat Zitat von baumgartner
    wenn dein ram gross genug ist für datei, könntest du die datei in einen array kopieren.

    gruß baumi
    imho ist in einen hash, die schnellere variante, da du nicht für jedes Element das gesamte array durchtesten musst.

    steve
    pornstars-online.de

  7. #7
    Registrierter Benutzer
    Registriert seit
    22.03.2005
    Beiträge
    16
    das mit dem hash hört sich ja recht interessant an, nur hab ich davon wenig ahnung. es währe also schön wenn mir jemand nen code beispiel oder ne seite nennen kann wo dies ausführlich erklärt wird, besonders auch das problem mit der kollision, die in meinem fall 100%ig vermieden werden muss.

    achja ich programmieren nicht in perl

  8. #8
    Registrierter Benutzer
    Registriert seit
    26.12.2001
    Beiträge
    228
    kollision? ich kann dir sonst morgen mal nen bisschen code zur verfügung stellen.

    steve
    pornstars-online.de

  9. #9
    Registrierter Benutzer
    Registriert seit
    22.03.2005
    Beiträge
    16
    zur kollision: soweit ich weiß sind hash-werte nicht eindeutig, deshalb kann es sein das 2 einträge den selben hash-wert haben oder nicht ?


    über bissle code würde ich mich freuen

  10. #10
    Registrierter Benutzer
    Registriert seit
    26.12.2001
    Beiträge
    228
    das ist mit hash nicht gemeint. Ein hash ist eine Datenstruktur in Perl.

    steve
    pornstars-online.de

  11. #11
    Registrierter Benutzer
    Registriert seit
    22.03.2005
    Beiträge
    16
    hm also ich verstehe unter hash eine datenstruktur bei der die daten in einer tabelle gespeichert werden. soweit ich weiß wird dabei der schlüssel in einen hash wert umgerechnet der als index dient und die genaue position des elements darstellt.

    kann sein das perl so etwas integriert hat, aber wie ich schon sagte ich benutze kein perl

  12. #12
    Registrierter Benutzer
    Registriert seit
    19.08.2004
    Beiträge
    404
    Richtig, in Perl versteht man unter einem Hash eine tabellenartige Datenstruktur - assoziatives Array wäre eine andere Bezeichnung.
    Ein Hash besteht aus KEY->VALUE Paaren wobei ein Key einmalig ist. demnach gibt es auch keine Kollisionen, wenn Du die Datensätze als Key benutzt.
    Allerdings habe ich so meine Zweifel, ob das bei >100.000 Datensätzen wirklich "effektiv" ist.

    Du kannst es ja mal probieren:
    (setzt voraus, das ein "Datensatz" immer in einer Zeile steht)

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

    use warnings;
    use 
    strict;

    my @Dateien = ('datei1.txt' 'datei2.txt'); # Dateien die eingelesen werden sollen
    my %Hash;

    foreach(@
    Dateien)
    {
      
    my $Datei $_;
      if(-
    e $Datei)
      {
        print 
    "Lese Datei \"$Datei\" ein...\n";
        
    open(FH,"<$Datei");
        while(
    FH)
        {
          
    chomp;
          
    $Hash{$_} = 1;
        }
        
    close(FH);
      }
      else
      {
        print 
    "Datei kann nicht geoeffnet werden\n";
      }
    }

    foreach(
    keys(%Hash))
    {
      print 
    "$_\n";



    Das Skript liest dann alle Dateien, die in @Dateien stehen ein und schreibt die Zeilen als Key in ein Hash.
    Am Ende werden alle Keys aus dem Hash ausgegeben...

    Die Ausgabe kannst du dann ja in eine Datei umleiten:

    Code:
    # perl skript.pl > ausgabe.txt

  13. #13
    Registrierter Benutzer
    Registriert seit
    26.12.2001
    Beiträge
    228
    Code:
    #!/usr/bin/perl
    
    use warnings;
    use strict;
    
    my ($file1, $file2) = @ARGV;
    my %hash;
    open(FH,$file1) or die "Fehler beim ˆffnen";
    
    foreach(<FH>) {
    # F¸r jede Zeile wird ein Hash-Element mit dem "Namen"
    # als Schl¸ssel erstellt
    	$hash{$_}++;
    }
    close(FH);
    
    open(FH,$file2) or die "Fehler beim ÷ffnen";
    
    foreach(<FH>) {			
    # Das Element wid ausgegeben, falls das Hash-Element schon existiert
    # Dann ist das Element dopppelt vorhanden. 	
       print $_ if $hash{$_};
    }
    hier werden nur die gleichen elemente ausgeben.


    steve
    pornstars-online.de

  14. #14
    Registrierter Benutzer
    Registriert seit
    22.03.2005
    Beiträge
    16
    danke

    konnte dadurch die zeit von 1h auf 1min verringern

Lesezeichen

Berechtigungen

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