Ankündigung

Einklappen
Keine Ankündigung bisher.

PHP Script für CSV diff

Einklappen

Neue Werbung 2019

Einklappen
Dieses Thema ist geschlossen.
X
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • PHP Script für CSV diff

    Ich bin gerade dabei, ein PHP Script zu schreiben, dass die Unterschiede zwischen 2 CSV Dateien erkennt und in ein drittes speichert. Das einzige Problem zurzeit ist, dass ich bestimmte Spalten (Customer ID) ignorieren mag, da sich diese ab und zu ändert, aber nicht gebraucht wird.

    Ich erstelle ein Newslettersystem, für das ich die Änderungen seit dem letzten Datenbankbackup benötige, leider habe ich keinen Zugriff auf die Datenabank.

    Wie kann ich die Kundennummer ignorieren, ohne die ganze Spalte zu löschen, da ich sie eventuell später benötige?

    Hier ist meine Struktur:

    CSV Datei 1 (alte DB): Code:
    Code:
    kundennr,anrede,name,vorname,plz,email
    1,herr,muste,max,1234,max.muster@gmail.com
    2,herr,joseph,mayer,7367,joseph@mayer.com
    3,frau,mayer,anna,7367,anne@mayer.com


    CSV Datei 2 (neue DB): Code:
    Code:
    kundennr,anrede,name,vorname,plz,email
    1,herr,muster,max,5678,max.muster@gmail.com
    7,herr,joseph,mayer,7367,joseph-mayer@gmail.com
    20,frau,mayer,anna,7367,anne@mayer.com


    Das sich die Kundennr für Joseph und Anna Mayer geändert hat, soll ignoriert werden.

    Was nicht ignoreirt werden soll, ist dass sich die eMail für Joseoph Mayer und die PLZ Max Muster geändert hat. Dieser Punkt funktioniert allerdings perfekt

    Hier ist mein kompletter code (ca 30 Zeilen): http://pastebin.com/bt7Pj3MP. Hier ist der relevante Teil:

    PHP-Code:
    $file1 file('2015-07-01.csv'FILE_IGNORE_NEW_LINES);
    $file2 file('2015-07-09.csv'FILE_IGNORE_NEW_LINES);

    sort($file1);
    sort($file2);

    $diff array_diff($file2$file1);
    array_unshift($diff$_POST['csv_cols']);
    $output substr(md5(rand()), 05). "-output.csv";
    file_put_contents($outputimplode(PHP_EOL$diff));

    unlink($file1_name);
    unlink($file2_name);

    header('Content-Description: Download ' $output);
    header('Content-Type: application/force-download');
    header("Content-Type: application/download");
    header("Content-Length: " filesize($output));
    header("Content-disposition: attachment; filename="" . basename($output) . """);
    readfile($output);
    unlink($output);
    exit; 


    Danke !
    Flo

  • #2
    Als Fortgeschrittener sollte dir klar sein, dass du die Kundennummern aus den Arrays direkt nach dem Einlesen entfernen musst, denn sonst geht das doch mit Sicherheit in die Hose
    Die Deutsche Rechtschreibung ist Freeware! Du darfst sie kostenlos nutzen, allerdings ist sie nicht Open Source, d.h. Du darfst sie nicht verändern oder in veränderter Form veröffentlichen.

    Kommentar


    • #3
      Erstell doch eine in-memory order eine temporäre sqlite und update deine Werte die du updaten willst ( soweit ich das sehe willst du genau nur das ), daraus dann eine CSV zu machen kann per Response-Stream passieren.

      Zumindest müsstest du dann nicht die möglichweise sehr großen CSVs im Speicher festhalten.
      [URL="https://gitter.im/php-de/chat?utm_source=share-link&utm_medium=link&utm_campaign=share-link"]PHP.de Gitter.im Chat[/URL] - [URL="https://raindrop.io/user/32178"]Meine öffentlichen Bookmarks[/URL] ← Ich habe dir geholfen ? [B][URL="https://www.amazon.de/gp/wishlist/348FHGUZWTNL0"]Beschenk mich[/URL][/B].

      Kommentar


      • #4
        Crossposting!
        Die Deutsche Rechtschreibung ist Freeware! Du darfst sie kostenlos nutzen, allerdings ist sie nicht Open Source, d.h. Du darfst sie nicht verändern oder in veränderter Form veröffentlichen.

        Kommentar


        • #5
          http://phpforum.de/forum/showthread.php?t=281637


          Bitte beachten:

          Zitat von Forenrichtlinien
          1. Anmerkung zu Multipostings
          ...
          Nicht vom TE gekennzeichnete Multipostings werden im Allgemeinen geschlossen.
          http://www.php.de/forum/webentwicklu...renrichtlinien


          [MOD: Geschlossen]
          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

          Lädt...
          X