Нужно правильно экспортировать строку с запятыми в нее в файл CSV - PullRequest
5 голосов
/ 21 апреля 2009

РЕДАКТИРОВАТЬ : в этом вопросе скопирована неправильная часть функции, ниже приведена соответствующая.

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

У меня есть комментарии, которые могут содержать запятую, и даже двойные кавычки, когда в поле комментария есть запятая, он сбрасывает весь CSV-файл.

Код ниже показывает, как он загружает данные в строку csv для помещения в файл csv.

Как мне получить его для правильного экспорта данных поля комментариев?

Ответы [ 6 ]

10 голосов
/ 21 апреля 2009

Вы должны проверить fputcsv(). Там также есть несколько полезных комментариев.

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

fputcsv () форматирует строку (передано как массив полей) как CSV и записать его (завершается переводом строки) в указанный дескриптор файла.

6 голосов
/ 21 апреля 2009

Заключите поле в двойные кавычки. Удвойте все встроенные двойные кавычки.

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

Обратите внимание, что это очень, очень близко к вопросу Работа с запятыми в CSV-файле

1 голос
/ 21 апреля 2009

Ум, почему бы просто не использовать встроенную команду mySQL? Если я что-то пропустил, пожалуйста, игнорируйте, но я думаю, что это самый быстрый маршрут:

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

Сайт в основном предлагает:

SELECT <fields or *> INTO OUTFILE '/tmp/result.text'
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY '\n'
FROM <table> WHERE <condition> 
0 голосов
/ 02 августа 2010

Важно ли сохранять запятые и двойные кавычки в ваших данных при их экспорте? Вы всегда можете прочитать его, а затем изменить данные перед экспортом в CSV.

Обычно я заключаю все в двойные кавычки и делаю комбинацию "," (двойная кавычка, двойная кавычка) в качестве разделителя. Таким образом, если я натыкаюсь на случайную двойную кавычку или случайную запятую, это не имеет большого значения.

0 голосов
/ 21 апреля 2009

Вы можете использовать другой разделитель, такой как "|" или «@», или какой-либо другой символ, который вряд ли появится в данных.

Большинство программного обеспечения CSV имеет возможность чтения в файл "CSV", который использует в качестве разделителя что-то, кроме запятой.

0 голосов
/ 21 апреля 2009

Редактировать: Плохо, я только что проверил это, и оно не работает - по крайней мере, в Excel.

Вы можете заменить запятые чем-то другим, однако:

$field = str_replace(',','#COMMA#',$row['Field']);
$csv_output .= $field.', '; 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...