5 Stimmen

Ich muss eine Zeichenfolge mit Kommas richtig in eine CSV-Datei exportieren.

EDIT : Ich habe den falschen Teil der Funktion in diese Frage kopiert, unten ist der richtige Teil.

$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 enthalten können, und sogar doppelte Anführungszeichen, wenn sie ein Komma im Kommentarfeld enthalten, wird die gesamte CSV-Datei gelöscht.

Mit dem nachstehenden Code werden die Daten in die csv-Zeichenkette geladen, um sie in eine csv-Datei zu übertragen.

Wie kann ich erreichen, dass die Daten des Kommentarfeldes richtig exportiert werden?

10voto

sshow Punkte 8250

Sie sollten sich informieren über fputcsv() . Auch dort gibt es einige nützliche Kommentare.

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

fputcsv() formatiert eine Zeile ( als Feld-Array) als CSV und schreibt sie (mit einem Zeilenumbruch beendet) in die das angegebene Dateihandle.

7voto

Jonathan Leffler Punkte 694013

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

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

Beachten Sie, dass dies der Frage sehr, sehr nahe kommt Umgang mit Kommas in einer CSV-Datei

1voto

cgp Punkte 40346

Warum nicht einfach den eingebauten mySQL-Befehl verwenden? Wenn ich etwas übersehen habe, ignorieren Sie bitte, aber ich denke, dies ist der schnellste Weg:

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

Website schlägt grundsätzlich vor:

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

0voto

Calvin Punkte 4471

Edit: Mein Fehler, ich habe das gerade getestet und es funktioniert nicht - zumindest nicht in Excel.

Sie können die Kommas aber auch durch etwas anderes ersetzen:

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

0voto

Andy White Punkte 83877

Sie könnten ein anderes Trennzeichen wie "|" oder "@" oder ein anderes Zeichen verwenden, das in den Daten wahrscheinlich nicht vorkommt.

Die meisten CSV-Programme sind in der Lage, eine CSV-Datei einzulesen, die ein anderes Trennzeichen als ein Komma verwendet.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X