Работа с запятыми в CSV

Я получаю CSV-данные из SOAP-вызова в php. К сожалению, данные могут содержать запятые. Он отформатирован правильно, как в

1, имя, 2, лариат, 3, «первый, последний», 5, NMEA, …

Мне нужно разобрать его на отдельные значения в php или javascript. Я просматривал потоки в переполнении стека и в других местах, но не нашел конкретного решения в php / javascript.

Подход, который я использую в настоящее время

$subject = '123,name,456,lryyrt,123213,"first,last",8585,namea3'; $pattern = '/,|,"/'; $t2=preg_replace ('/,|(".*")/','$0*',$subject); $t2=str_replace(',','*',$t2); $t2=str_replace('*',',',$t2); 

Где * – разделитель, но preg_replace генерирует дополнительный *. Я попробовал несколько других подходов, связанных с preg_match и другими функциями preg_ но не смог получить какой-либо чистый раскол.

Любое предложение о том, как разбить CSV-данные, содержащие запятые в нем?

Related of "Работа с запятыми в CSV"

Не пытайтесь делать это с регулярным выражением. Просто используйте str_getcsv() ! Третий параметр сообщает str_getcsv() чтобы искать поля, заключенные в кавычки.

 $subject = '123,name,456,lryyrt,123213,"first,last",8585,namea3'; $array = str_getcsv($subject, ",", '"'); print_r($array); // Prints: Array ( [0] => 123 [1] => name [2] => 456 [3] => lryyrt [4] => 123213 [5] => first,last [6] => 8585 [7] => namea3 ) 

Еще один способ конвертировать CSV-файл в ассоциативный массив.

 <?php // // Convert csv file to associative array: // function csv_to_array($input, $delimiter=',') { $header = null; $data = array(); $csvData = str_getcsv($input, "\n"); foreach($csvData as $csvLine){ if(is_null($header)) $header = explode($delimiter, $csvLine); else{ $items = explode($delimiter, $csvLine); for($n = 0, $m = count($header); $n < $m; $n++){ $prepareData[$header[$n]] = $items[$n]; } $data[] = $prepareData; } } return $data; } //----------------------------------- // //Usage: $csvArr = csv_to_array(file_get_contents('test.csv')); ?> 

Для использования JavaScript используйте jQuery-CSV

Если вы уже используете jQuery, просто добавьте модуль jquery-csv.js, чтобы разоблачить методы расширения. Затем просто преобразуйте CSV непосредственно в массив JavaScript.

Если вы только разбираете, следующее преобразует его в одномерный массив:

 $.csv.toArray(csv); 

Если у вас многострочная CSV-строка, следующее преобразует ее в двумерный массив:

 $.csv.toArrays(csv); 

Примечание: все различные окончания строк обнаруживаются и расщепляются правильно, используя интеллектуальное регулярное выражение.

Разделитель по умолчанию представляет собой двойную кавычку ("), а разделитель по умолчанию – это запятая (,), но вы можете изменить пользовательские настройки, указав их в вызове метода.

Пример:

$ .csv.toArray (csv, {separator: ';', delimiter: "'"});

Я создал проект, чтобы обеспечить сквозной синтаксический анализатор CSV, написанный на JavaScript, который выводит догадки из импорта-экспорта CSV.

Выполнение тяжелой работы на клиенте устраняет ненужную нагрузку на сервер и удаляет любые ненужные AJAX-обратные поездки на сервер.

Обновить:

Если вы ищете решение на стороне сервера, библиотека также работает на Node.js.