Есть ли способ включить запятые в столбцы CSV, не нарушая форматирование?

Вопрос:У меня есть CSV с двумя столбцами с именем и числом. Некоторые люди называют запятые, например Joe Blow, CFA. Эта запятая разбивает формат CSV, поскольку он интерпретируется как новый столбец. Я прочитал, и наиболее распространенный рецепт, похоже, заменяет этот символ или заменяет разделитель новым значением (например, this|that|the, other). Мне бы очень хотелось сохранить разделитель запятой

Вопрос:

У меня есть 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)

Оцените статью
Добавить комментарий