tester: fgetcsv

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

  1. 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

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

      1. 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

        1. und wie komm ich nun wieder zur funktion für csv?!

          1. 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

      2. 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

      3. 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

      4. 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