CSV-Datei gescickt einlesen

CSV-Datei gescickt einlesen

am 24.06.2006 21:47:15 von Micha Kuehn

Hallo,
ich möchte eine von Excel geschriebene CSV-Datei einlesen. Dabei will
ich möglichst direkt auf entsprechende Zeilen/Spalten zugreifen können,
da die Daten immer an derselben Stelle stehen.

Das Dumme ist nur, dass in den Excel-Zellen auch harte zeilenumbrüche
stehen können und dass bei der scv-Datei dann dort auch Umbrüche stehen
und der Zelleninhalt in Anführungsstriche gesetzt wird.

Bisher lese ich die Datei mit $lines=file(...); ein und kann dann z.B.
mit $lines[3] auf die vierte Zeile zugreifen. Wenn aber dort harte
Zeilenumbrüche drin sind, geht es nicht mehr so.

Wer hilft mir auf die Sprünge?

Micha
--
Persönliche Mails: Bitte nur als reply - und als Wurmkur werden alle
Mails > 100 KB automatisch und unbesehen gelöscht!

Re: CSV-Datei gescickt einlesen

am 24.06.2006 23:04:33 von Joerg Behrens

Micha Kuehn schrieb:
> Hallo,
> ich möchte eine von Excel geschriebene CSV-Datei einlesen. Dabei will
> ich möglichst direkt auf entsprechende Zeilen/Spalten zugreifen können,
> da die Daten immer an derselben Stelle stehen.
>
> Das Dumme ist nur, dass in den Excel-Zellen auch harte zeilenumbrüche
> stehen können und dass bei der scv-Datei dann dort auch Umbrüche stehen
> und der Zelleninhalt in Anführungsstriche gesetzt wird.
>
> Bisher lese ich die Datei mit $lines=file(...); ein und kann dann z.B.
> mit $lines[3] auf die vierte Zeile zugreifen. Wenn aber dort harte
> Zeilenumbrüche drin sind, geht es nicht mehr so.
>
> Wer hilft mir auf die Sprünge?

Ersetze die \r\n durch ein Metazeichen welches du spaeter wieder zurueck
ersetzt.

Achja....
http://www.php.net/fgetcsv koennte dein file file() ersetzen.

Gruss
Joerg

Re: CSV-Datei gescickt einlesen

am 25.06.2006 13:18:56 von Micha Kuehn

Joerg Behrens schrieb:
> Ersetze die \r\n durch ein Metazeichen welches du spaeter wieder zurueck
> ersetzt.

Das hilft nicht wirklich, denn es gibt ja (am Ende jeder "wirklichen"
Zeile, also wenn ich bei Excel eine Zeile nach unten wandere) auch einen
Umbruch. Er unterscheidet sich nur dadurch durch die anderen harten
Umbrüche innerhalb einer Excel-zelle, dass bei letzterem zusätzliche
Anführungszeichen gesetzt werden. Text, der vorher schon in
Anführungszeichen stand, wird nun in doppelte gesetzt.

Beispiel:
In Excel:
| A | B | C
------------------------------------
1 | Inhalt A1 | Inh. B1 | Inh. C1
------------------------------------
2 | hier ein | B2 | C2
| harter Umbr. | |
------------------------------------
3 | A3 | "Text" | C3
------------------------------------

Als CSV:
Inhalt A1;Inh. B1;Inh. C1
"hier ein
harter Umbr.";B2;C2
A3;""Text"";C3

> Achja....
> http://www.php.net/fgetcsv koennte dein file file() ersetzen.

Ich probier's mal aus, danke!
Natürlich kann man auch manuell auf die Anführungszeichen prüfen etc.,
aber wenn es eine fertige Lösung gibt, umso besser!

> Gruss
> Joerg

Micha
--
Persönliche Mails: Bitte nur als reply - und als Wurmkur werden alle
Mails > 100 KB automatisch und unbesehen gelöscht!

Re: CSV-Datei gescickt einlesen

am 26.06.2006 12:52:40 von Micha Kuehn

Micha Kuehn schrieb:
> Das hilft nicht wirklich, denn es gibt ja (am Ende jeder "wirklichen"
> Zeile, also wenn ich bei Excel eine Zeile nach unten wandere) auch einen
> Umbruch.

Nur der Vollständigkeit halber: Der Umbruch an dieser Stelle ist das
Zeichen chr(0x0A), also kein normaler Umbruch.

>> http://www.php.net/fgetcsv koennte dein file file() ersetzen.
>
> Ich probier's mal aus, danke!

Das war sehr hilfreich, die Umbrüche muss man aber trotzdem noch manuell
ändern (in meinem Fall zu
).

Micha
--
Persönliche Mails: Bitte nur als reply - und als Wurmkur werden alle
Mails > 100 KB automatisch und unbesehen gelöscht!

Re: CSV-Datei gescickt einlesen

am 26.06.2006 13:00:17 von Frank Schenk

Micha Kuehn wrote:

> Nur der Vollständigkeit halber: Der Umbruch an dieser Stelle ist das
> Zeichen chr(0x0A), also kein normaler Umbruch.

Was hast du an "\n" - "Newline" - "0x0A" auszusetzen? Das ist sehr wohl
ein "normaler" Umbruch - nicht unter Windows und MAC aber in der
Unixwelt schon.

> Das war sehr hilfreich, die Umbrüche muss man aber trotzdem noch manuell
> ändern (in meinem Fall zu
).

preg_replace() sollte da hilfreich sein.

gruß, Frank

Re: CSV-Datei gescickt einlesen

am 26.06.2006 13:12:08 von Micha Kuehn

Frank Schenk schrieb:
> Was hast du an "\n" - "Newline" - "0x0A" auszusetzen?

Nichts, ich hatte nicht kapiert, dass das dasselbe ist. Ich dachte aber,
ich hätte \n einzeln auch ausprobiert, ohne dass etwas ausgetauscht
wurde. War wohl nicht so.

> preg_replace() sollte da hilfreich sein.

Ein einfaches str_replace tut's auch schon.

Micha
--
Persönliche Mails: Bitte nur als reply - und als Wurmkur werden alle
Mails > 100 KB automatisch und unbesehen gelöscht!

Re: CSV-Datei gescickt einlesen

am 26.06.2006 13:15:17 von Frank Schenk

Micha Kuehn wrote:
> Frank Schenk schrieb:
>
>> preg_replace() sollte da hilfreich sein.
>
> Ein einfaches str_replace tut's auch schon.

Nicht, wenn die Zeilen durch Newline getrennt sind ;-)

gruß, Frank

Re: CSV-Datei gescickt einlesen

am 26.06.2006 22:00:36 von Micha Kuehn

Frank Schenk schrieb:
> Nicht, wenn die Zeilen durch Newline getrennt sind ;-)

Ach so, deshalb ging wohl
$zelle = str_replace("\n", "
", $zelle);
nicht?

$zelle = str_replace(chr(0x0A), "
", $zelle);
tut jedenfalls seinen Dienst sehr gut!

Micha
--
Persönliche Mails: Bitte nur als reply - und als Wurmkur werden alle
Mails > 100 KB automatisch und unbesehen gelöscht!

Re: CSV-Datei gescickt einlesen

am 26.06.2006 22:35:20 von Carsten Wiedmann

Micha Kuehn schrieb:

Das:
> $zelle = str_replace("\n", "
", $zelle);

und das:
> $zelle = str_replace(chr(0x0A), "
", $zelle);

ist IMHO das Selbe.

Gruß
Carsten