Tom: fgetcsv

Beitrag lesen

Hello,

wie kann ich als trennzeichen einen ; zulassen und gleichzeit verbieten, dass ; in foöge eines leerzeichens verbieten als trennzeichen...

Das funktioniert anders:

Erstmal die Begriffe:

Allgemeine EDV      PHP            Bedeutung
  --------------      -----------    ---------
  Line-End            Line-End       Zeichen, dass zur Trennung von Datensätzen (Zeilen) dient
  Separator           Delimiter      Zeichen, dass zur Feldtrennung benutzt wird
  Delimiter           Enclosures     Zeichen, dass zur Feldbegrenzung benutzt wird

Das Standard-Data Format (ungefähr 25 Jahre oder älter) sprach von

import from ... sdf seperated by ";" delimited with """

Wenn Du nun also Daten im CSV-Format abspeichern willst, musst Du die Felder folgendermaßen aufbauen:

## Feldbegrenzer innerhalb der Daten maskieren durch Doppelung

foreach($_rec as $key => $field)
  {
    $_rec[$key] = str_replace($delimiter, $delimiter.$delimiter, $field);
  }

## Felder zu einem Datensatz zusammenbauen

$rec_str = $delimiter.implode($delimiter.$separator.$delimiter,$_rec).$delimiter;

Ich habe hier die Standardbegriffe und nicht die aus PHP verwendet.

Wenn Du dann später die Daten wieder einliest, geht das einfach mit

$_data = fgetcsv($fh, $max_rec_len, $separator, $delimiter);

in den Daernsätzen können dann alle Zeichen drinstehen, auch Zeilenende-Zeichen, Feldbegrenzer oder Feldtrenner. Allerdings läßt sich eine solche Datei dan nur noch sinnvoll mittels fgetcsv() lesen und nicht mehr mit fget()

Wenn man allerdings bereits versaute Daten wieder lesbar machen will, muss man sicher einen erheblich größeren Aufwand treiben.

Harzliche Grüße aus http://www.annerschbarrich.de

Tom

--
Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
Nur selber lernen macht schlau