MiSo: csv-Datei richtig "parsen"

Ich hab, sagen wir mal ne csv Datei. Die ist in dem standardmäßigen Open Office format.

"Spalte1";"Spalte2";"Spalte3"
"Text";Zahl;"Text"

usw.

Diese Datei hochzuladen ist kein Problem. Nun möchte ich diese in ein Array schreiben. Sollte nachher so aussehen, dass ich pro Zeile jeweils ein Array zweiter dimension hab mit ([Spalte1] => Text [Spalte2] => Zahl)

das ganze geht auch wunderbar. Einfach den Inhalt mit explode nach "\n" gesplittet. Dann hatt ich ein Array mit Zeilen. Diese dann nochmal einzeln nach ";" unterteilt, dann hatt ich auch "Zellen".

Lange rede, wenig Sinn. Das Problem ist folgendes:
am Ende jeder "Zeile" scheint auf irgendeine Weise ein Leerzeichen aufzutauchen, wo doch gar keins drin sein sollte. An keiner Stelle meines scriptes sag ich dem Ding so was wie mach_blödsinn_ersetz("\n"," ").

Hat vielleicht jemand ne Idee wie das Leerzeichen da reinkommt?

mfg
Micha

--
viel Spass: ie:{ fl:) br:> va:( ls:[ fo:) rl:? n4:{ ss:{ de:> js:} ch:? sh:( mo:) zu:]
  1. Hallo Micha,

    Ich hab, sagen wir mal ne csv Datei. Die ist in dem standardmäßigen Open Office format.

    das standardmäßige OpenOffice.org-Format für Tabellen wäre ods, aber das nur am Rande ...

    das ganze geht auch wunderbar. Einfach den Inhalt mit explode nach "\n" gesplittet. Dann hatt ich ein Array mit Zeilen. Diese dann nochmal einzeln nach ";" unterteilt, dann hatt ich auch "Zellen".

    Noch einfacher wäre es mit fgetcsv() ...

    Hat vielleicht jemand ne Idee wie das Leerzeichen da reinkommt?

    Das Leerzeichen wird kein Leerzeichen sein, sondern ein \r (also ein http://de.selfhtml.org/perl/sprache/zeichenketten.htm#steuerzeichen@title=Wagenrücklauf) da Windows als Zeilenumbruch \r\n verwendet, und nicht nur \n.

    Grüße aus Nürnberg
    Tobias

    1. Das Leerzeichen wird kein Leerzeichen sein, sondern ein \r

      Danke, daran hab ich nicht gedacht.

      mfg
      Micha

      --
      viel Spass: ie:{ fl:) br:> va:( ls:[ fo:) rl:? n4:{ ss:{ de:> js:} ch:? sh:( mo:) zu:]
  2. Hi,

    vielleicht hilft dir fgetcsv.

    Der Yeti

    --
    Habe nun, ach! WInfo, BWL, und Mathe, Und leider auch Info!
    Durchaus studiert, mit heißem Bemühn. Da steh' ich nun, ich armer Thor!
    Und bin so klug als wie zuvor!
    sh:( fo:| ch:? rl:? br:< n4:& ie:( mo:| va:| de:[ zu:) fl:| ss:) ls:< js:|
  3. echo $begrüßung;

    am Ende jeder "Zeile" scheint auf irgendeine Weise ein Leerzeichen aufzutauchen, wo doch gar keins drin sein sollte.
    Hat vielleicht jemand ne Idee wie das Leerzeichen da reinkommt?

    Ich nicht, denn im Hellsehen bin ich eine Niete.
    Du könntest statt wild rumzuraten einfach genau nachsehen, was du wirklich für Daten hast. Dafür eignet sich var_dump() ganz gut, weil es auch die Länge des Strings angezeigt und notfalls die Zeichen nachzählen kannst.
    Für Fälle bei denen schlecht sichtbare Zeichen (z.B. Steuerzeichen) vorkommen, empfiehlt sich eine Ansicht der Byte-Werte. bin2hex() gibt die Bytes des übergebenen Arguments als Hex-Werte aus. Zum Formatieren dieser Zeichenkette eignet sich chunk_split() mit 2 und einem Leerzeichen als 2. und 3. Parameter.

    Deine Vorgehensweise berücksichtigt außerdem im Gegensatz zur Funktion fgetcsv() nicht, dass Trennzeichen auch innerhalb von Werten vorkommen können, dann aber entsprechend gekennzeichnet sind.

    echo "$verabschiedung $name";

  4. Hi Micha!

    Du solltest unbedingt einen Standardbefehl in PHP dafür finden, da du sonst ein Problem bekommen kannst, wenn dein Text einen ; enthält!
    BSP.:
    "temperature; unit: °C"; "37.5";
    dann hast du in deinem Array:
    text[x]="temperature
    number[x]= unit:°C"

    Grüsse,
    Richard