2010-06-12 2 views
0

Этот код экспортирует данные в файл csv, который открывается в Excel.Экспорт в csv, строка с запятой в нем, разбивает его

Если в строке есть запятая, она испортит порядок данных.

Мне нужна помощь в изменении моего кода ниже, чтобы разрешить любые строки, содержащие запятую внутри него, чтобы не создавать новый столбец до строки.

Я предполагаю, что он пройдет каждую строку в двойных кавычках или что-то, что содержит строку, поэтому любая запятая в этих цитатах, то она сделает исключение.

Любая помощь приветствуется.

$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

это сделал это $ csv_output = ' "' $ строки [ 'поле']. '",',. и $ csv_output. = '"'. $ rowr [$ j]. '",'; – Brad

ответ

3
+1

+1 - Не изобретайте колесо, csv - это четко определенный формат, который имеет много правильных реализаций. – R0MANARMY

+0

Нет, это не «четко определено», поскольку различные приложения различаются в своем формате, но есть несколько общих шаблонов, которые придерживаются большинство программ CSV :-) Одним из примеров несогласованности является Microsoft Excel, который, по крайней мере, со шведским языком, использует с двоеточием, чтобы отделить поля (!). Тем не менее +1 для не изобретать колесо. –

+0

, поэтому он должен выглядеть примерно так: fputcsv (split (',', $ row ['Field'])); и fputcsv (split (',', $ rowr [$ j])); – Brad

2

Правильный формат: "тест", "тест", «использовать двойной "" котировки внутри "

1-я петля:

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

второй цикл:

$csv_output .= '"' . str_replace('"', '""', $rowr[$j]) . '", '; 
Смежные вопросы