Вопрос:
У меня есть CSV с двумя столбцами с именем и числом. Некоторые люди называют запятые, например Joe Blow, CFA. Эта запятая разбивает формат CSV, поскольку он интерпретируется как новый столбец.
Я прочитал, и наиболее распространенный рецепт, похоже, заменяет этот символ или заменяет разделитель новым значением (например, this|that|the, other).
Мне бы очень хотелось сохранить разделитель запятой (я знаю, что excel поддерживает другие разделители, но другие интерпретаторы не могут). Я также хотел бы сохранить запятую в названии, так как Joe Blow| CFA выглядит довольно глупо.
Есть ли способ включить запятые в столбцы CSV, не нарушая форматирование, например, путем их экранирования?
Лучший ответ:
Заключите поле в кавычки, например
field1_value,field2_value,»field 3,value»,field4, etc…
Смотрите википедию.
Обновлено:
Чтобы кодировать кавычку, используйте «, один символ двойной кавычки в поле будет закодирован как «», и все поле станет «»»». Так что если вы видите следующее, например, в Excel:
————————————— | regular_value |,,,»| ,»», |»»» |»| —————————————
CSV файл будет содержать:
regular_value,»,,,»»»,»,»»»»,»,»»»»»»»»,»»»»
Запятая просто инкапсулируется с помощью кавычек, так , становится «,».
Запятая и кавычка должны быть заключены в кавычки и заключены в кавычки, поэтому «,» становится «»»,»»».
Ответ №1
Проблема с форматом CSV заключается в том, что здесь нет одной спецификации, есть несколько принятых методов, без какого-либо способа различения, которые следует использовать (для генерации/интерпретации). Я обсуждал все методы экранирования символов (в этом случае – переводы строки, но те же основные предпосылки) в другом посте. В основном все сводится к использованию процесса генерации/экранирования CSV для предполагаемых пользователей, и надеюсь, что остальные не возражают.
Ответ №2
Если вы хотите сделать это, вы можете использовать кавычки. Что-то вроде этого
$name = «Joe Blow, CFA.»; $arr[] = «»».$name.»»»;
Итак, теперь вы можете использовать запятую в переменной имени.
Ответ №3
Вы должны указать эти значения.
Здесь – более подробная спецификация.
Ответ №4
В дополнение к точкам в других ответах: одно замечание, если вы используете кавычки в Excel, – это размещение ваших пробелов. Если у вас есть такая строка кода:
print ‘%s, «%s», «%s», «%s»‘ % (value_1, value_2, value_3, value_4)
Excel будет обрабатывать начальную цитату как буквенную цитату, а не использовать ее для удаления запятых. Ваш код нужно будет изменить на
print ‘%s,»%s»,»%s»,»%s»‘ % (value_1, value_2, value_3, value_4)
Именно эта тонкость привела меня сюда.
Ответ №5
Я столкнулся с той же проблемой, и цитирование , не помогло. В конце концов я заменил , на +, завершил обработку, сохранил вывод в outfile и заменил + на ,. Это может показаться уродливым, но это сработало для меня.
Ответ №6
Вы можете кодировать свои значения, например, в PHP base64_encode ($ str)/base64_decode ($ str)
ИМО это проще, чем удваивать цитаты и т.д.
https://www.php.net/manual/en/function.base64-encode.php
Закодированные значения никогда не будут содержать запятую, поэтому каждая запятая в вашем CSV будет разделителем.
Ответ №7
Вы можете использовать поле Text_Qualifier в вашем диспетчере соединений с плоскими файлами как «. Это должно обернуть ваши данные в кавычки и только разделять запятыми, которые находятся вне кавычек.
Ответ №8
Во-первых, если значение элемента имеет символ двойной кавычки ( “), замените на 2 символа двойной кавычки (” “)
item = item.ToString().Replace(«»»», «»»»»»)
Наконец, значение item item:
ON LEFT: с символом двойной кавычки (“)
ON RIGHT: с символом двойной кавычки (“) и запятой (,)
csv += «»»» & item.ToString() & «»»,» Ответ №9
В зависимости от вашего языка может быть доступен метод to_json. Это позволит избежать многих вещей, которые нарушают CSV.
Ответ №10
Двойные кавычки не помогли мне, они помогли мне «. Если вы хотите поместить двойные кавычки в качестве примера, вы можете установить «».
Вы можете построить формулы, например:
fprintf(strout, «»=if(C3=1,»»»»,B3)»n»);
напишу в csv:
= ЕСЛИ (С3 = 1, “”, В3)