2009-04-21 6 views
5

EDIT: Kopierte falschen Teil der Funktion in diese Frage, unten ist die entsprechende.Müssen String richtig mit Komma in eine CSV-Datei exportieren

$values = mysql_query("SELECT lname, fname, email, dtelephone, etelephone, contactwhen, thursday, 
friday, saturday, sunday, monday, comments FROM volunteers_2009 WHERE venue_id = $venue_id"); 

while ($rowr = mysql_fetch_row($values)) { 
    for ($j=0;$j<$i;$j++) { 
     $csv_output .= $rowr[$j].", "; 
    } 
    $csv_output .= "\n"; 
} 

Ich habe Kommentare, die ein Komma in ihm, und sogar doppelte Anführungszeichen haben können, wenn sie ein Komma im Kommentarfeld hat, ist es die gesamte CSV-Datei abwirft.

Der folgende Code ist, wie es die Daten in den CSV-String lädt, in eine CSV-Datei zu legen.

Wie kann ich die Kommentare Feld Daten richtig exportieren?

Antwort

6

Schließen Sie das Feld in doppelte Anführungszeichen ein. Verdoppeln Sie alle eingebetteten Anführungszeichen.

ordinary field,"field with , in it","field with double double quote ("""")" 

Beachten Sie, dass dies ist sehr, sehr nah an der Frage Dealing with commas in a CSV file

+0

Nun, dieser ist sprachspezifisch (ich denke, die gewählte Antwort für diese Frage wurde in C oder C++ geschrieben?). sshow hat hier eine sehr gute php-spezifische Lösung geboten, die in der anderen Frage nicht gegeben wurde. – Calvin

+0

Deshalb habe ich gesagt "nah an der anderen Frage" und nicht "nah - weil genau Duplikat" (und es ist lustig, aber diese beiden Wörter "schließen" werden unterschiedlich in meinem Dialekt des Englischen ausgesprochen; der erste hat einen scharfen Zischlaut s ; der zweite ein stimmhafter z-Ton). –

+1

Die Antwort auf die x-ref-Frage gibt auch die algorithmische Information, die benötigt wird, um den Code zu erzeugen, um diesen zu lösen (oder um die Qualität der Ausgabe von vorgeschlagenen Lösungen zu bewerten). –

0

Edit: Meine schlechte, habe ich gerade getestet und es funktioniert nicht - zumindest nicht in Excel.

Sie könnten die Kommas mit etwas anderes ersetzen, aber:

$field = str_replace(',','#COMMA#',$row['Field']); 
$csv_output .= $field.', '; 
0

Sie ein anderes Trennzeichen wie verwenden könnte „|“ oder "@" oder ein anderes Zeichen, das wahrscheinlich nicht in den Daten erscheint.

Die meisten CSV-Software kann eine "CSV" -Datei lesen, die etwas anderes als ein Komma als Trennzeichen verwendet.

+0

@ möglicherweise kein gutes Beispiel, da es in der E-Mail-Adresse sein wird ... aber das ist nur ein Beispiel. –

10

Sie sollten fputcsv() überprüfen. Es gibt auch einige nützliche Kommentare.

int fputcsv (resource $handle , array $fields [, string $delimiter = ',' 
    [, string $enclosure = '"' ]]) 

fputcsv() einen Zeilenformate (geben als Felder Array) als CSV und schreibt sie (durch eine neue Zeile beendet) an die angegebene Datei-Handle.

1

Umn, warum nicht einfach den integrierten mySQL-Befehl verwenden? Wenn ich etwas verpasst haben, ignorieren Sie bitte, aber ich denke, dies ist der schnellste Weg ist:

http://www.netreveal.com/ddalton/2006/08/how_to_export_mysql_to_csv.html

Webseite im Grunde schlägt vor:

SELECT <fields or *> INTO OUTFILE '/tmp/result.text' 
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' 
LINES TERMINATED BY '\n' 
FROM <table> WHERE <condition> 
0

Ist es wichtig, die Kommas und doppelte Anführungszeichen in Ihrer Daten zu halten wenn Sie es exportieren? Sie können die Daten immer einlesen und dann ändern, bevor Sie sie in die CSV-Datei exportieren.

Was ich normalerweise tun, ist alles in doppelte Anführungszeichen einzuschließen und die Kombination von "," (Doppelzitat Komma Doppelzitat) mein Trennzeichen zu machen. Auf diese Weise, wenn ich auf ein zufälliges Doppelzitat oder ein zufälliges Komma stoße, ist das keine große Sache.

Verwandte Themen