Problem mit Trennzeichen in einer CSV-Datei
Sascha
- php
Hallo Forum!
Nachdem ich von Euch viele hilfreiche Tipps bekommen und (weitestgehend) umgesetzt habe. Habe ich ein weiteres Problem...
Das Anlegen der CSV-Datei ansicht ist kein Problem (mehr;-)
Aber Meine Ausgabe hat allerdings immernoch nicht den gewünschten erfolg.
Hierzu ein Beispiel ich hoffe es lässt sich erkennen...
Zeile 1:
hostID,hostname,admin,locationID,dhcp_enable,osversionID,in_use,dnsdomainID,dns_enable,deviceclassID,organizationunitID,user,date_establishment,causer_adminID,date_modify,modify_adminID,date_last_activity,comment,time
Zeile 2:
1,xsrv1,NULL,71,Yes,28,Yes,24,Yes,5,8,,20030812121840,2,00000000000000,0,00000000000000,---,00000000
Zeile 3:
2,rz5,NULL,285,No,28,Yes,24,Yes,10,8,,20030812121840,2,00000000000000,0,00000000000000,---,00000000
Zeile 3:
8,se24-09,NULL,245,Yes,7,Yes,24,Yes,1,8,,20030430115449,2,00000000000000,0,00000000000000,Zuordnung: , Bemerkung: Pool SE24
,00000000
Hier liegt der Hase im Pfeffer.... das Feld 'comment' hat unter anderem auch Kommata inne siehe oben ("Zuordnung: , Bemerkung: Pool SE24")
Die bisherige Lösung habe ich modifiziert (durch die Hinweise von gestern)
while($row = mysql_fetch_row($result)) {
$array = $row;
$separated = addslashes(implode(";", $array));
print ($separated."\n");
}
Wie kann ich jetzt die einzelne Felder in Anführungszeichen setzten?
Viele Grüße
Sascha
Zeile 3:
8,se24-09,NULL,245,Yes,7,Yes,24,Yes,1,8,,20030430115449,2,00000000000000,0,00000000000000,Zuordnung: , Bemerkung: Pool SE24
,00000000
Zusätzlich wird die Zeile nach "Zuordnung: , Bemerkung: Pool SE24" umgebrochen und neu angefangen..
Zeile:
8,se24-09,NULL,245,Yes,7,Yes,24,Yes,1,8,,20030430115449,2,00000000000000,0,00000000000000,Zuordnung: , Bemerkung: Pool SE24
Zeile:
,00000000
Vielen Dank für Eure hilfe
Sascha :-)
Hallo Sascha,
Wie kann ich jetzt die einzelne Felder in Anführungszeichen setzten?
In dem Du ganz einfach den Seperator entsprechend modizierst und am Anfang und Ende des Strings ebenfalls Anführungszeichen ranbastelst.
Zusätzlich wird die Zeile nach "Zuordnung: , Bemerkung: Pool SE24" umgebrochen und neu angefangen..
Aber doch nicht in Deiner CSV-Datei, nur auf dem Bildschirm oder?
Gruss AndreD
Hallo AndreD
In dem Du ganz einfach den Seperator entsprechend modizierst und am Anfang und Ende des Strings ebenfalls Anführungszeichen ranbastelst.
Angenommen ich modifiziere den Seperator so ("",", $array) dann bekomme ich doch
1","blaa","usw."
ich müsste dann aber "1","blaa","usw." dann haben..
Aber doch nicht in Deiner CSV-Datei, nur auf dem Bildschirm oder?
Also wenn ich die Datei in Excel (nicht schlagen ;-) betrachte wird Sie umgebrochen... auch wenn ich Sie im Notepad betrachte...
Gruss AndreD
Grüsse
Sascha
uuups es muss so dann aussehen ("","", $array)
1","blaa","usw."
Hallo Sascha,
ich müsste dann aber "1","blaa","usw." dann haben..
Ja dann lies doch bitte nochmal genau was ich geschrieben habe:
In dem Du ganz einfach den Seperator entsprechend modizierst und am Anfang und Ende des Strings ebenfalls Anführungszeichen ranbastelst.
Also wenn ich die Datei in Excel (nicht schlagen ;-) betrachte wird Sie umgebrochen... auch wenn ich Sie im Notepad betrachte...
In CVS sollte eigentlich erst nach einem "richtigen" Zeilenumbruch umbrochen werden. Mach mal am Ende einer jeden Zeile ein \n für einen Umbruch ran. Also z.B. $csv .= [Dein String in welcher Form auch immer] . "\n";
Ausserdem ist IMHO Excel nicht wirklich die beste Möglichkeit CSV-Dateien zu betrachten, da Excel jede Zeile in nur eine Zelle pro Spalte schreibt anstatt diese seperiert darzustellen. Benutze am besten einen gescheiten Texteditor Deiner Wahl (z.B. Ultraedit auf Win32 oder bbEdit, jEdit auf Linux) zur Kontrolle...
Gruss AndreD
Hallo AndreD
Habs genau gelesen :-) und auch verstanden...jetzt ;-)
In CVS sollte eigentlich erst nach einem "richtigen" Zeilenumbruch umbrochen werden. Mach mal am Ende einer jeden Zeile ein \n für einen Umbruch ran. Also z.B. $csv .= [Dein String in welcher Form auch immer] . "\n";
Die Geschichte mit "\n" ist bei mir korrekt... Aber der Umbruch ist trotzdem da... ich habe im hexEdit nachgeschaut... vermutlich rappelts an den Daten aus der DB?!
Viele Grüße
Sascha
Hallo Sascha,
Die Geschichte mit "\n" ist bei mir korrekt... Aber der Umbruch ist trotzdem da... ich habe im hexEdit nachgeschaut... vermutlich rappelts an den Daten aus der DB?!
Tja, mehr als vermuten kann ich leider auch nicht. Du musst Dir halt mal die Daten aus der DB ausgeben lassen und schauen ob da ein Umbruch mit drinne ist. Wenn Du tatsächlich inmitten Deiner Daten einen Umbruch gibt, kann das auch an einem Leerzeichen liegen, AFAIK kann es sein das ein Leerzeichen wie ein \n gewertet wird... also wenn in Deiner DB ein Feld mit "Wert " gefüllt ist kann das der Fehler sein.
Noch ein Tipp: Es ist leichter wenn Du Dir ein Testszenario mit einer kleinen CSV-Datei machst die nur 3-4 Felder und ein paar Datensätze hat. Sobald diese mit normalen Daten (Also keine Sonderzeichen) läuft, testest Du das ganze mit Daten die Kommas, Semikolons, Anführungszeichen etc. enthalten und schaust ob Fehler auftreten. So fällt es Dir leichter Fehler zu analysieren und einzukreisen. Wenn es dann mit der kleinen CSV-Datei läuft sollte es auch mit einer grösseren laufen...
Weiterhin viel Spass,
Gruss AndreD
Ich habe den Fehler gefunden yuhuuuu :-)
In der Datenbank waren Abatzzeichen gespeichert... naja und mit chop($meinfeld[x]) habe ich das Problem lösen können.
Danke AndreD für Deine hilfe
viele Grüße
Sascha