Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Doppelte Einträge aus Textdatei entfernen

Einklappen

Neue Werbung 2019

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

  • [Erledigt] Doppelte Einträge aus Textdatei entfernen

    Hey,

    sicher eine einfache Sache, für die die es wissen..

    Ich suche eine Möglichkeit wie ich aus einer Textdatei doppelte Einträge, in diesem Fall eMail Adressen, per Script löschen kann. Die mails stehen alle in einer Zeile und sind durch Komma getrennt, z.B.:

    mail@1.de,mail@2.de,mail@3.de,mail@4.de,

    Nun wie kann ich doppelte Einträge löschen so das immer nur eine mail von den doppelt oder dreifach genannten übrig bleibt, z.B.:

    mail@1.de,mail@2.de,mail@2.de,mail@3.de,mail@3.de, mail@3.de,
    Soll ersetzt werden durch:
    mail@1.de,mail@2.de,mail@3.de,

    Ich hatte zwar schon was ähnliches im Netz gefunden, aber das hilft mir auch nicht viel weiter, es gibt nur eine echo""; und keine löschfunktion und die einzelnen mails müssten jede einzelne in einer zeile stehen. Setz ich mal nur als evtl. Denkanstoß rein.

    Code:
    <?php
    $datei = "textdatei.txt";
    
    $fgs = file($datei);
    $fgs = array_map('trim', $fgs); // (PHP 4 >= 4.0.6) // Zeilenumbrüche in allen Elementen entfernen
    $fgs = array_unique($fgs); // (PHP 4 >= 4.0.1) // Duplikate entfernen
    
    /** und Daten wieder wegschreiben. Zeilenmbrüche nicht vergessen */
    foreach($fgs as $line)
    { // zum Testen erstmal nur echo-Ausgabe
        echo $line, "\n";
    }
    ?>
    Hoffe das das jemand liest und mir helfen kann.

    Gruß,
    Robman

  • #2
    also von der reihenfolge her ist das schon ok so .. wenn ich das auf die
    schnelle richtig nachvollzogen hab.

    der schritt der bei dir halt fehlt ist das speichern des neuen strings ..
    dazu kannst du die funktionen fopen(), fwrite() und fclose() sowie join() brauchen.
    ansonsten kann dir vllt noch print_r() helfen .. ist zum debugging von arrays
    eindeutig besser geeignet als dauernd ne foreach() schleife

    # edit

    ah natürlich .. asche auf mein haupt .. explode anhand des kommas fehlt
    natürlich .. ne ne ne sowas darf nich sein.

    Kommentar


    • #3
      Code:
      // 1. Datei einlesen (enthält mailaddy1,mailaddy2,mailaddy3,...)
      $fgs = implode("",file('email.txt'));
      
      // 2. Array an ","-Positionen trennen
      // hier war Dein Fehler - Dein Array war 1 Element groß - ein einziger String mit dem kpl. Dateiinhalt ;)
      $x = explode(",",$fgs);
      
      // 3. Duplikate entfernen 
      $x = array_unique($x); 
      
      print_r($x);
      c'est ca.

      Kommentar


      • #4
        Ok, klappt wunderbar!

        Meine textdatei sieht so aus:

        mail@1.de,mail@1.de,mail@2.de,mail@2.de,mail@2.de, mail@3.de,mail@3.de,mail@3.de,mail@3.de,
        Und nach Scriptausführung erscheint:
        Array ( [0] => mail@1.de [2] => mail@2.de [5] => mail@3.de [9] => )

        Nur wie kann ich das ganze jetzt in der Textdatei speichern?

        Code:
        <?
        $datei = "textdatei.txt";
        $fgs = implode("",file($datei));
        
        // 2. Array an ","-Positionen trennen
        // hier war Dein Fehler - Dein Array war 1 Element groß - ein einziger String mit dem kpl. Dateiinhalt ;)
        $x = explode(",",$fgs);
        
        // 3. Duplikate entfernen
        $x = array_unique($x);
        
        print_r($x);
        
        ?>
        der schritt der bei dir halt fehlt ist das speichern des neuen strings ..
        dazu kannst du die funktionen fopen(), fwrite() und fclose() sowie join() brauchen.
        ansonsten kann dir vllt noch print_r() helfen .. ist zum debugging von arrays
        eindeutig besser geeignet als dauernd ne foreach() schleife
        Genau dieser Schritt fehlt noch. Wie mach ich das an dem Code Beispiel?

        Kommentar


        • #5
          indem du dir das manual zu den entsprechenden funktionen anschaust.

          Kommentar


          • #6
            Gibts da nicht ein universal "einlesen-ändern-speichern" script das ich da reinsetzen kann?

            Kommentar


            • #7
              nein.

              Kommentar


              • #8
                1. mit fopen eine Datei öffnen
                2. mit fwrite den Inhalt Deines Array reinschreiben
                Wenn Du möchtest, kannst Du entweder mit einer for-Schleife
                den Inhalt Element für Element schreiben, oder mit
                $wieder_ein_string = implode(",",$x); den unique-Rest wieder in
                einen String zurückverwandeln und den String sichern.

                Kommentar


                • #9
                  So gehts nicht...

                  Code:
                  <?
                  $datei = "textdatei.txt";
                  $fp = fopen("$datei","w");
                  $fgs = implode("",file($datei));
                  $x = explode(",",$fgs);
                  $x = array_unique($x);
                  fwrite($fp,$x);
                  fclose($fp);
                  ?>
                  Beim Ausführen schreibt die Funktion nur "Array" in die Textdatei.. eine bessere Idee???

                  Kommentar


                  • #10
                    Zitat von Robman
                    Beim Ausführen schreibt die Funktion nur "Array" in die Textdatei.. eine bessere Idee???
                    Ja, zum Beispiel die, welche ich Dir 17.10.2004, 13:55 gepostet habe.

                    Es scheint mir, als solltest Du vielleicht mal ne Stunde was anderes machen - Rasenmähen, Origami, etc. - und dann nochmal den Thread durchlesen - dann fällt es Dir garantiert wie Schuppen aus den Haaren.... Stichwort: implode(","...

                    Code:
                    $fp = fopen("$datei","w"); 
                    $fgs = implode("",file($datei));
                    ist auch nicht der richtige Weg. Du löschst den Inhalt der Datei mit fopen, ehe Du ihn einliest? nicht gut.

                    Code:
                    $fgs = implode("",file($datei));
                    $fp = fopen("$datei","w");
                    Sorum wird ein Schuh draus.

                    Kommentar


                    • #11
                      $x ist ein array. nachdem du es mit explode() getrennt hast. gegenstück zu
                      explode ist wie von humer geschrieben: implode() bzw join()

                      Kommentar


                      • #12
                        Habe jetzt die Eingabe

                        Code:
                        <?
                        $datei = "textdatei.txt";
                        $fg=join("",file($datei));
                        $x=explode(",",$fg);
                        $y=array_unique($x);
                        $r=join(",",$y);
                        echo $r;
                        $fp=fopen($datei,"w");
                        fputs($fp,$r);
                        fclose($fp);
                        ?>
                        So gehts jetzt wunderbar! Thx @ all !!

                        Gruß,
                        Robman

                        http://www.robman.de

                        Kommentar

                        Lädt...
                        X