Я ввожу следующие данные из файла CSV, форматирование которого у меня нет абсолютно никакого контроля над:Импортировать файл CSV с полем, включая запятые в котировках?
CampaignName,"""keyword""",441,11683,3.77%,2.99,112.82,"1,318.02",1.7,12,109.84
Как вы можете видеть, один из полей имеет длинный номер с запятой разделителем, хотя значение заключена в «...»
данные импортируются в SQL, используя следующий фрагмент кода:
while (($data = fgetcsv($handle)) !== FALSE) {
$import="INSERT into ".$date."_keywords(Campaign,Keyword,Clicks,Impressions,CTR,CPC,CPM,Cost,Position,Conversions,Cost_per_conv) values('$data[0]','".mysql_real_escape_string($data[1])."','".mysql_real_escape_string($data[2])."','$data[3]','$data[4]','$data[5]','$data[6]','$data[7]','$data[8]','$data[9]','$data[10]')";
mysql_query($import) or die(mysql_error());
}
несмотря на длинный номер в кавычках, fgetcsv не кажется, чтобы быть в состоянии обрабатывать его и, как результат, экономить число равно $ 1, а остальные остальное цитируется.
Он правильно подбирает все остальные поля - поэтому, похоже, это не просто предположение, что разделитель, а 318.02 - это следующее значение.
Вопрос, как я могу получить полный номер для добавления в базу данных?
Редактировать: Я прочитал другую тему о работе с запятыми в CSV-файлах, и этот файл уже содержит данные в двойных кавычках, как это предлагает этот поток, так что это не проблема.
fgetcsv() имеет кучу дополнительных аргументов для определения разделителей, кавычек и т. Д. ... использовать их. –
http://php.net/manual/en/function.fgetcsv.php –
Я попытался использовать аргумент оболочки следующим образом: while (($ data = fgetcsv ($ handle, 1000, ",", "\" "))! == FALSE) { Не имеет значения – FarhadD