Ankündigung

Einklappen
Keine Ankündigung bisher.

zwei csv-Dateien per php vergleichen

Einklappen

Neue Werbung 2019

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

  • zwei csv-Dateien per php vergleichen

    Hallo,
    ich habe zwei csv dateien, die ich per php vergleichen will.
    Dabei wird die Datei 1 gegen die Datei 2 verglichen. Datei 1 wird immer wieder neu durch ein Programm erstellt.
    Hier mal ein Beispiel:
    Datei 1.
    10, Ralf, Hamburg
    18, Stefan, Berlin
    33, Norbert, Hintertupfingen

    Datei 2:
    10, Ralf, Hamburg
    17, Jonas, München
    33, Norbert, Hamburg

    Als Ergebnis benötige ich eine Liste mit den unterschieden zwischen Datei 1 und Datei 2.
    Es gibt drei Varianten:
    a) fehlende Einträge (hier Nummer 17)
    b) neue Einträge (1
    c) geänderte Werte (33)

    Ich habe nun folgendes Script gefunden, dass mir die beiden Dateien einliest und vergleicht
    PHP-Code:
    <?php
    $file1 
    fopen("datei1.csv""r");

    while (
    $data fgetcsv($file11000",")) {
        
    $array1[] = $data;
    }

    fclose($file1);

    $file2 fopen("datei2.csv""r");

    while (
    $data fgetcsv($file21000",")) {
        
    $array2[] = $data;
    }

    fclose($file2);

    echo 
    "<p></p><p></p>Inhalt von Array 1<br />";
    var_dump($array1);

    echo 
    "<p></p><p></p>Inhalt von Array 2<br />";
    var_dump($array2);
    echo 
    "<p></p><p></p>Unterschied zwischen Array 1 und Array 2<br />";

    for (
    $a 0$a count($array1); $a++) {
        
    $diff array_diff_assoc($array1[$a], $array2[$a]);
        
    var_dump($diff);
        echo 
    "<p>------------</p>";
    }
    ?>
    Als Ergebnis bekomme ich aber eine riesige Liste aller Zeilen, die auch nicht stimmt. Wenn Einträge fehlen (obiges beispiel die 17) kommt er aus dem Tritt und zeigt mir die folgende Zeile als fehlerhaft.
    Kann man die Ausgabe irgendwie so begrenzen, dass er nur die Unterschiede ausgibt und irgendwie nicht aus dem tritt gerät bei fehlenden Einträgen?

    Danke schon mal im Voraus.

    Gruß Werner

  • #2
    Hallo,

    hier ist ein Programmierforum. Willst du es selbst machen oder soll das ein Jobangebot werden?
    The string "()()" is not palindrom but the String "())(" is.

    Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
    PHP.de Wissenssammlung | Kein Support per PN

    Kommentar


    • #3
      Ich suche Hilfe wie ich das lösen kann, soll keine Auftragsarbeit werden.
      Ach so, ich habe gerade gesehen, dass aus meiner
      Code:
      (18)
      eine 1 mit Smiley geworden ist. Soll natürlich die 18 sein.

      gruß Werner

      Kommentar


      • #4
        Ich suche Hilfe wie ich das lösen kann,
        Mit den Array-Funktionen von PHP. http://php.net/manual/de/ref.array.php
        The string "()()" is not palindrom but the String "())(" is.

        Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
        PHP.de Wissenssammlung | Kein Support per PN

        Kommentar


        • #5
          Hallo hausl,
          na ja, das habe ich ja auch schon in dem Script gesehen, dass ich verwende.
          Ein paar detailliertere tips wären da nicht schlecht. Die Referenz habe ich auch so schon gefunden.

          Kommentar


          • #6
            ID ist hier die Nummer am Anfang und Vergleichswerte sind alle Spalten? Dann indexiere die Arrays nach der Nummer

            PHP-Code:
            $indexarray1[$nummer] = $eintrag// für jeden Eintrag 
            Dann kannst du mit array_diff_key() schonmal auf fehlende und neue Einträge prüfen, dazu musst du das dann nur in beide Richtungen machen.

            Für 'geändert' gehst du den Rest, den du mit array_intersect_key() ermittelst, durch und guckst, ob unter dem gleichen Key der gleiche Inhalt im anderen Array steht

            PHP-Code:
            $indexarray1[$nummer] === $indexarray2[$nummer]; // für jeden Eintrag aus einem der beiden Arrays 
            [I]You know, my wife sometimes looks at me strangely. „Duncan“, she says, „there's more to life than Solaris“. Frankly, it's like she speaks another language. I mean, the words make sense individually, but put them together and it's complete nonsense.[/I]

            Kommentar

            Lädt...
            X