2010-06-12 14 views
0

Ce code exporte des données dans un fichier csv, qui est ouvert dans Excel.Exportation en CSV, chaîne w/virgule dedans, elle se sépare

Lorsqu'une chaîne contient une virgule, cela perturbe l'ordre des données.

J'ai besoin d'aide pour modifier mon code ci-dessous afin de résoudre les chaînes contenant une virgule, de ne pas créer de nouvelle colonne avant la fin de la chaîne.

Je suppose qu'il passera chaque chaîne entre guillemets ou quelque chose qui contient la chaîne, donc toute virgule dans ces guillemets, alors il fera une exception.

Toute aide est appréciée.

$result = mysql_query("select lname, fname, email, dtelephone, etelephone, contactwhen, comments, thursday, 
friday, saturday, sunday, monday FROM volunteers_2010"); 

$csv_output .= "Last Name,First Name,Email,Telephone (Day),Telephone (Evening),Contact When,Comments,Thursday,Friday,Saturday,Sunday,Monday,Comments\n"; 

$i = 0; 
if (mysql_num_rows($result) > 0) { 
while ($row = mysql_fetch_assoc($result)) { 
    $csv_output .= $row['Field'].", "; 
    $i++; 
} 
} 
$csv_output .= "\n"; 

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

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

ce qu'il a fait $ csv_output = ' "' $ row [ 'champ']. '",';. et $ csv_output. = '"'. $ rowr [$ j]. '",'; – Brad

Répondre

3
+1

+1 - Ne pas réinventer la roue, csv est un format bien défini qui a de nombreuses implémentations correctes. – R0MANARMY

+0

Non, ce n'est pas "bien défini" car diverses applications varient dans leur format, mais il y a quelques modèles courants auxquels adhèrent la plupart des programmes CSV :-) Un exemple d'incohérence est Microsoft Excel qui, au moins avec les locales suédoises, utilise point-virgule pour séparer les champs (!). Encore +1 pour ne pas avoir réinventé la roue. –

+0

donc il devrait ressembler à quelque chose comme: fputcsv (split (',', $ row ['Field'])); et fputcsv (split (',', $ rowr [$ j])); – Brad

2

format correct: "test", "test", « utiliser double "" citations à l'intérieur "

1ère boucle:

$csv_output .= '"' . str_replace('"', '""', $rowr['Field']) . '", '; 

2ème boucle:

$csv_output .= '"' . str_replace('"', '""', $rowr[$j]) . '", ';