fgetcsv
tester
- php
0 XaraX0 tester0 XaraX0 Christoph Zurnieden0 Andreas Dölling0 Tom
morgen.
wie kann ich an stelle dieser zeile bzw statt dem ";" eine alternative verwenden, womit lediglich strichpunkte gewertet werden als trennzeichen, wenn im folgenden kein leerzeichen auftritt?
while(($data=fgetcsv($handle,1000,";"))!==FALSE)
hab schon while(($data=fgetcsv($handle,1000,";^ "))!==FALSE) versucht.
danke
Hallo Tester,
Deine Frage
wie kann ich an stelle dieser zeile bzw statt dem ";" eine alternative verwenden, womit lediglich strichpunkte gewertet werden als trennzeichen, wenn im folgenden kein leerzeichen auftritt?
habe ich so verstanden:
Wie kann ich Zeichen "A" gegen Zeichenkette "A" + "B" austaschen, wenn Zeichenkette "AB" gar nicht vorkommt.
Siehst Du das rot blinkende Fragezeichen über meinen Kopf?
Gruß aus Berlin!
eddi
wie kann ich als trennzeichen einen ; zulassen und gleichzeit verbieten, dass ; in foöge eines leerzeichens verbieten als trennzeichen...
Re:
Beispiel:
$text=str_replace('; ',';',file_get_contents('Deine.datei'));
$text=explode("\n",$text);
$c=count($text);
for($i=0;$i<$c;$i++)
$text[$i]=explode(";",$text[$i]);
print_r($text);
http://de3.php.net/manual/de/function.str-replace.php
http://de3.php.net/manual/de/function.explode.php
Gruß aus Berlin!
eddi
und wie komm ich nun wieder zur funktion für csv?!
Hi,
und wie komm ich nun wieder zur funktion für csv?!
Im Gegensatz zur sonst üblichen Vorgehensweise hier im Forum hast Du den vollständigen Code bekommen. Das _ist_ Deine Funktion.
so short
Christoph Zurnieden
Hi,
wie kann ich als trennzeichen einen ; zulassen und gleichzeit verbieten, dass ; in foöge eines leerzeichens verbieten als trennzeichen...
Das Trennzeichen zwischen Deinen Feldern ist also ein Semikolon:
"Feld 1;Feld 2;Feld 3;"
Wenn nun aber _vor_ dem Semikolon ein Leerzeichen steht " ;" soll das Semikolon nicht als Trennzeichen gelten.
Ist das so korrekt?
Das wird von fgetcsv() nicht unterstützt, das kann nur einzelne Zeichen als Trenner benutzen; wenn ich das richtig im Kopf habe sogar nur Ein-Byte-Zeichen. Du bräuchtest aber eine Trennung mittels Regex. Ähnlich diesem hier:"[^ ];".
Aber all das ist normalerweise ein gutes Zeichen dafür, das an anderr Stelle etwas verkehrt läuft (auf das Du evt keinen Einfluß hast, das ist dann Pech und kostet die Mühe eines selbstgebauten fgetcsv()). Wer bastelt denn die CSVs, wo bekommst Du die her?
so short
Christoph Zurnieden
Hallo,
Du willst vermutlich verhindern, daß ein String, der das Semikolon als grammatisches Zeichen im Inhalt verwendet, an diesem Semikolon aufgetrennt wird, oder?
Also z.B.:
"bla";"blubb";"Ein ganzer Satz; mit Semikolon."
Hier soll das dritte Textfeld eben intakt bleiben, richtig?
Leider erwartet fgetcvs() als dritten Parameter genau ein Zeichen und keinen regulären Ausdruck.
Meine erste Idee wäre jetzt, das Einlesen der CSV-Daten in zwei Schritte aufzuteilen.
Schritt 1: mit file() erst einmal zeilenweise die Datensätze aus der Datei auslesen
Schritt 2: den so erhaltenen Array durchlaufen und jeden Datensatz mit preg_split("/;\S/", $data); auftrennen.
Das ist jetzt ganz schnell runtergetippt. Bitte also noch mal bei www.php.net in die Doku schauen wegen file() und preg_split().
Hoffe, das hilft Dir weiter.
Ciao,
Andreas
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