Tom: CSV und sonstige Formate

Beitrag lesen

Hello,

verabschiede Dich vom Formmailer und beschäftige Dich damit, wie man aus dem Post des Formulares eine CSV-Datei generieren kann auf dem Server.

CSV ist ein Müllformat! Absolut unzureichend spezifiziert, keinerlei Encoding-Information, Escaping problematisch, etc. Jedes Programm kocht da sein eigenes Süppchen!

Darum benutze ich ausschließlich die Variante von CSV, sie sich früher "SDF" nannte.
Das hatte jahrzehntelang Bestand, bis M$ kam.

Standard Data Format wurde von IBM vorgschlagen, um die Ashton Tate dBase-Dateien über PC-Connect (das war der Requester) mit System 36 Dateien austauschen zu können.

Da auch alle damals gängigen Hochsprachen das Format konnten (wenn nicht mit eigenen Funktionen, dann eben mit schnell selbst erstellten) hat es sich sher schnell verbreitet. Die Regeln sind einfach.

Felder werden grundsätzlich in " " eingeschlossen.
Kommt im Feld selber ein " vor, wird es verdoppelt
Die so eingeschlöossenen Felder werden durch Semikolon voneinander geetrennt
Das Satzende markiert ein Zeilenumbruch

Da EBCDIC und ASCII schon immer zwei Welten waren, wurden Platzhalter vereinbart

DELIMITER = das Zeichen, das die Felder begrenzt
SEPARATOR = das Zeichen, das die Felder trennt
CRLF      = Zeilenumbruch

Erlaubt waren alle Bytecodes aus dem Bereich 0 bis 255
Welcher Code (Codegruppe) nun welches Zeichen darstellte, war eben Sache des Zeichensatzes

Außerdem durften nur vollständige Datensätze übergeben werden. D.h.: alle Zeilen müssen genausoviele Felder haben.

fgetcsv() kann diese Variante lesen.
fputcsv   ist aber leider die Microschrott-Variante, in der auch versucht wird, Typen zu übergeben, also numerische Daten _nicht_ in Häkchen einzuschließen, da sie sich daduech von Strings unterscheiden sollen.

Diese Funktion kommt dem gewünschtern Ziel scjhon etwas näher,
allerdings erzeugt sie auch noch keine "vollständigen" Zeilen

function make_csv($_data)
{
   $row ='';
   if(is_array($_data))
   {
     foreach($_data as $fieldname => $field_value)
     {
       $_data[$fieldname] = str_replace('"','""',$field_value);
     }
     $row = implode('";"',$_data);

if(strlen($row) > 0)  ## Datensatz mit Inhalt
     {
       $row = '"'.$row.'"'."\n";
     }
     else   ## leerer Datensatz
     {
       $row = "\n";
     }
   }
   return $row;
}

Ich bevorzuge Dateien mit fester Satzlänge und festem Feldaufbau.
Das ermöglicht die volle Wahlfreiheit, vorwärts wie rückwärts
Leider bietet PHP dafür auch keine fertigen Funktionen an. dabei musste es nur endlich die einfache Definition eigener Datenstrukturen einführen. Dann wäöre daw Thema durch.

pack() und unpack() sind da nicht übersichtlich genug.

Harzliche Grüße vom Berg
http://bergpost.annerschbarrich.de

Tom

--
Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
Nur selber lernen macht schlau
Ein Jammer ist auch, dass die Dummen so selbstsicher und die Klugen voller Zweifel sind. Das sollte uns häufiger zweifeln lassen :-)

0 71

Scherzkeks- Bestellung

gary
  • sonstiges
  1. 0
    Tom
    1. 0
      gary
      1. 0
        Tom
        1. 0
          gary
          1. 0
            gary
          2. 0
            Johannes Zeller
          3. 0
            Patrick Andrieu
  2. 0
    EKKi
    1. 0

      Aufbau eines einfachen Shops

      Tom
      • programmiertechnik
      1. 2
        EKKi
        1. 0
          gary
          1. 0
            Tom
            1. 0
              gary
              1. 0
                Tom
          2. 1
            Siechfred
            1. 0

              Marketing und Webshop

              Tom
              • sonstiges
              1. 0

                Webshop oder Formmailer?

                Siechfred
                • meinung
                1. 0
                  gary
                  1. 0
                    Siechfred
                    1. 0
                      gary
                      1. 0
                        EKKi
                  2. 0
                    EKKi
                    1. 0
                      gary
                      1. 0
                        EKKi
                      2. 0
                        Der Martin
                        1. 0
                          Tom
                2. 0

                  Marketing: Was ist ein Medienbruch?

                  Tom
                  • sonstiges
                  1. 0
                    Siechfred
                    1. 0
                      Tom
                      1. 0
                        Siechfred
                        1. 0

                          Bitte weiterlesen

                          Tom
                          • menschelei
                          1. 0

                            Begrifflichkeiten

                            Siechfred
                            • meinung
                            1. 0
                              gary
          3. 0
            EKKi
            1. 0
              gary
              1. 0
                EKKi
                1. 0
                  gary
                  1. 0
                    EKKi
              2. 0

                Kleiner PHP-Kurs gefällig?

                Tom
              3. 1
                Kai345
                1. 0
                  gary
                  1. 0
                    Tom
                    1. 0
                      gary
                      1. 0
                        gary
                        1. 0
                          Shadowcrow
                          1. 0

                            CSV-Dateien nutzen

                            Tom
                            1. 0

                              CSV-Dateien nutzen, bei Excel bestimmte Zeichen vermeiden

                              Tom
                              1. 0
                                gary
                                1. 0
                                  EKKi
                      2. 0
                        Der Martin
                        1. 0
                          Sven Rautenberg
                          1. 0
                            gary
                        2. 0
                          gary
                    2. 0
                      Sven Rautenberg
                      1. 0

                        CSV und sonstige Formate

                        Tom
        2. 0
          Tom
          1. 0
            gary
          2. 0
            EKKi
            1. 0
              Tom
              1. 0
                Siechfred
              2. 0
                EKKi
  3. 0
    FraFu
    1. 0

      Aufbau eines einfachen Shops

      Tom
      • programmiertechnik
    2. 0
      gary
      1. 0
        EKKi
        1. 0

          Unterschied zwischen Sicherheit und Plausibilität

          Tom
          • programmiertechnik
          1. 0
            EKKi
      2. 0
        FraFu
  4. 0

    Die Folgen einer Scherzkeks- Bestellung

    Tom
    • zu diesem forum
  5. 0
    Don P