Auge: csv Datei von Duplikaten befreien

Beitrag lesen

Hallo

ich will mir gerade eine Funktion schreiben, die eine CSV-Datei von Duplikaten befreit.

Kann man das so anfangen?

// CSV-Datei auf Unikate bereinigen
$myCsvArray = explode("\n",file_get_contents($csv_datei));

geht auch in einem Rutsch mit file. Die Funktion liest jede Zeile in ein Array-Element ein.

// CSV-Datei auf Unikate bereinigen
$myCsvArray = file($csv_datei);
$myCsvArray = array_unique($myCsvArray);

Das sieht soweit grundsätzlich richtig aus.

// Original löschen
if(file_exists($csv_datei)) {
    unlink($csv_datei);
}
    // Neue Datei schreiben
...

Du kannst die Datei auch überschreiben. Damit brauchst du diesen Block nimmer mehr.

Und wie schreibe ich die Daten dann am besten wieder in die Datei?

$datei = fopen("csv_datei.csv","a");
fwrite($datei, ??? );
fclose($datei);

Wie oben gesagt, du kannst die Datei auch überschreiben, ohne sie vorher zu löschen. Dazu brauchst du einen anderen Modus zum öffnen der Datei als "a". Der Modus "w" bietet sich an, da die Datei auf die Länge 0 gebracht wird und der Zeiger/Cursor damit am Anfang der nun leeren Datei gesetzt wird.

Aus der Doku zu fopen (Abschnitt „mode“ [1], Modus "w"): „Nur zum Schreiben geöffnet; platziere Dateizeiger auf Dateianfang und kürze die Datei auf eine Länge von 0. Existiert die Datei nicht, versuche, diese zu erzeugen.“

Weiterhin musst du dafür sorgen, dass in der Zeit der Schreiboperation niemand anderes auf die Datei zugreifen kann. Das kannst du mit der Funktion flock erreichen.

$datei = fopen("csv_datei.csv", "w");
if (flock($datei, LOCK_EX)) {
    fwrite($datei, implode("\n", $myCsvArray));
    flock($datei, LOCK_UN);
}
fclose($datei);

[edit]: Der Volsltändigkeit halber sei hinzugefügt, dass die Alternative zu fopen, flock, fwrite und fclose die Verwendung von file_put_contents ist, die diesen Block in einer Funktion vereinigt.[/edit]

Also den Inhalt mit file einlesen, ihn mit array_unique behandeln und ihn zu guter Letzt mit dem Block direkt hier drüber [edit](oder mit file_put_contents)[/edit] wieder in die Datei schreiben.

Tschö, Auge

--
Ein echtes Alchimistenlabor musste voll mit Glasgefäßen sein, die so aussahen, als wären sie beim öffentlichen Schluckaufwettbewerb der Glasbläsergilde entstanden.
Hohle Köpfe von Terry Pratchett

  1. Früher™️ gab es für Abschnitte einer PHP-Doku-Seite IDs, auf die man verlinken konnte. Nun nicht mehr. 👎 😟 ↩︎

0 100

csv Datei von Duplikaten befreien

Pit
  • php
  1. 0
    Auge
    1. 0
      Pit
      1. 0
        Der Martin
  2. 0
    MudGuard
    1. 0
      Pit
  3. 0

    Kommt drauf an...

    Raktenwissenschaftler
    1. 0
      Raketenwissenschaftler
  4. 0

    csv Datei von Duplikaten befreien / Neue Frage

    Pit
    1. 0
      Pit
      1. 0
        Raketenwissenschaftler
        1. 0
          Raketenwissenschaftler
          • sql
        2. 0
          Tabellenkalk
        3. 0
          Rolf B
          1. 0
            Raketenwissenschaftler
          2. 0
            Pit
            • danke
            • php
            1. 0
              Rolf B
              1. 0
                Pit
                1. 0
                  Rolf B
                  1. 0
                    Pit
                    1. 0
                      Rolf B
                      1. 0
                        Pit
                        1. 0
                          Rolf B
                          1. 0
                            Pit
                            1. 0

                              csv Datei von Duplikaten befreien / Neue Frage und Antwort

                              Pit
                              1. 0
                                Rolf B
                                1. 0
                                  Pit
                                  1. 0
                                    Pit
                                    1. 1
                                      Rolf B
                                      1. 0
                                        Pit
                                        1. 0
                                          Rolf B
                                          1. 0
                                            Pit
                                            1. 0
                                              Rolf B
                                              1. 0
                                                Pit
                                            2. 0
                                              Rolf B
                                              1. 0
                                                Pit
                                                1. 0
                                                  Rolf B
                                                  1. 0
                                                    Pit
                                                    1. 0
                                                      Pit
                                                      1. 0
                                                        Raketenwissenschaftler
                                                        1. 0
                                                          Pit
                                                          1. 0
                                                            Raketenwissenschaftler
                                                            1. 0
                                                              Pit
                                                            2. 0
                                                              Rolf B
                                                              1. 0
                                                                Pit
                                                                1. 0
                                                                  Rolf B
                                                                  1. 0
                                                                    Matthias Apsel
                                                                    1. 0
                                                                      Tabellenkalk
                                                                      1. 0
                                                                        MudGuard
                                                                    2. 0
                                                                      Rolf B
                                                                  2. 0
                                                                    Pit
                                                          2. 1
                                                            Felix Riesterer
                                                            • php
                                                            1. 0
                                                              Pit
                                                              1. 0
                                                                Felix Riesterer
                                                                1. 0
                                                                  Pit
                                                                  1. 1

                                                                    NoSQL?

                                                                    Raketenwissenschaftler
                                                                    1. 0

                                                                      NoSQL? (Korrektur)

                                                                      Raketenwissenschaftler
    2. 0
      Raketenwissenschaftler
      1. 0
        Pit
        1. 0
          Raketenwissenschaftler
      2. 0
        Raketenwissenschaftler
    3. 0
      Felix Riesterer
      1. 0
        Pit
        1. 0
          Tabellenkalk
          1. 3
            Raketenwissenschaftler
            1. 2
              Tabellenkalk
        2. 0
          Felix Riesterer
          1. 0
            Pit
    4. 0
      pl
  5. 1

    Kritik an Deinem Umgang mit Hilfe

    Felix Riesterer
    1. 3
      Pit
      1. 1
        Der Martin
        1. 0
          pl
          1. 0
            Tabellenkalk
            1. 0
              Der Martin
            2. 0
              pl
        2. 0

          Zeilenumbruch in einem CSV-Feld

          Linuchs
          • programmiertechnik
          1. 0
            MudGuard
          2. 0
            Der Martin
            1. 0
              Rolf B
              1. 0
                Der Martin
          3. 0
            pl
            1. 0
              Felix Riesterer
              1. 0
                pl
              2. 0
                pl
              3. 1
                Christian Kruse
                1. 0
                  Rolf B
                  1. 0
                    Christian Kruse
                    1. 0
                      Der Martin
                      1. 0
                        Christian Kruse
                        1. 0
                          Der Martin
                    2. 0
                      Rolf B
                      1. 0
                        Christian Kruse
            2. 0
              Rolf B
              1. 0

                Zeilenumbruch in einer textarea

                pl
      2. 0
        Felix Riesterer
      3. 0
        Rolf B
      4. 0
        pl
        1. 0
          pl
      5. 0
        Raketenwissenschaftler