2009-04-21 14 views
5

EDIT: copiado la parte incorrecta de la función en esta pregunta, a continuación es la adecuada.Necesita exportar cadena con comas correctamente en un archivo CSV

$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"; 
} 

tengo comentarios que pueden tener una coma en ella, y citas dobles, incluso, cuando se tiene una coma en el campo comentario, se despoja de todo el archivo csv.

El siguiente código es cómo carga los datos en la cadena csv, para ponerlos en un archivo csv.

¿Cómo puedo exportar correctamente los datos del campo de comentarios?

Respuesta

6

Encierre el campo entre comillas dobles. Duplique cualquier comilla doble incrustada.

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

Tenga en cuenta que esto es muy, muy cerca de la cuestión Dealing with commas in a CSV file

+0

Bueno, este es más específico del idioma (creo que la respuesta elegida para esa pregunta fue escrita en C o C++?). sshow ha proporcionado una muy buena solución específica de php aquí que no se dio en la otra pregunta. – Calvin

+0

Es por eso que dije "cerca de la otra pregunta" y no "cerca, porque duplica exactamente" (y es gracioso, pero esas dos palabras "cerrar" se pronuncian de manera diferente en mi dialecto de inglés: la primera tiene una sibilante aguda ; el segundo es un sonido z sonoro). –

+1

Además, la respuesta a la pregunta x-ref-d proporciona la información algorítmica necesaria para producir el código para resolverlo (o para evaluar la calidad de la salida de las soluciones propuestas). –

0

Editar: Mi mal, acabo de probar eso y no funciona, al menos no en Excel.

Se podría reemplazar las comas con alguna otra cosa, sin embargo:

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

Se puede usar un delimitador diferente, como "|" o "@" u otro personaje que probablemente no aparezca en los datos.

La mayoría del software csv tiene la capacidad de leer en un archivo "csv" que utiliza algo más que una coma como delimitador.

+0

@ podría no ser un buen ejemplo, ya que estará en la dirección de correo electrónico ... pero eso es sólo un ejemplo. –

10

Debe retirar fputcsv(). También hay algunos comentarios útiles allí.

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

fputcsv() formatea una línea ( pasado como una matriz de campos) como CSV y escribirlo (terminada por un salto de línea) para el identificador de archivo especificado.

1

Umn, ¿por qué no utilizar el comando integrado MySQL? Si me he perdido algo, por favor, ignora, pero creo que esta es la ruta más rápida:

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

sitio web básicamente sugiere:

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

Es importante mantener las comas y comillas dobles en sus datos cuando lo exportas? Siempre puede leerlo y luego modificar los datos antes de exportarlos al CSV.

Lo que normalmente hago es encerrar todo entre comillas dobles y hacer la combinación de "," (comillas dobles comas dobles) mi delimitador. De esa manera, si me tropiezo con una comilla doble al azar o una coma al azar, no es un gran problema.

Cuestiones relacionadas