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



у меня есть два столбца CSV с именем и номером. Некоторые имена людей используют запятые, например Joe Blow, CFA. эта запятая нарушает формат CSV, так как он интерпретируется как новый столбец.



Я прочитал, и наиболее распространенный рецепт, похоже, заменяет этот символ или заменяет разделитель новым значением (например,this|that|the, other).



Я бы очень хотел сохранить разделитель запятых (я знаю, что excel поддерживает другие разделители, но другие интерпретаторы не могут). Я бы тоже хотелось бы сохранить запятую в имени, как Joe Blow| CFA выглядит довольно глупо.



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

442   10  
csv

10 ответов:

проблема с форматом CSV заключается в том, что нет одной спецификации, есть несколько принятых методов, без возможности различения, которые следует использовать (для генерации/интерпретации). Я обсудил все методы экранирования символов (в этом случае новые строки, но та же основная предпосылка) в следующий пост. В основном это сводится к использованию процесса генерации/экранирования CSV для предполагаемых пользователей и надеется, что остальные не возражают.

ссылка спецификаций документ.

заключите поле в кавычки, например

field1_value,field2_value,"field 3,value",field4, etc...

посмотреть Википедия.

Обновлено:

чтобы закодировать цитату, используйте " один символ кавычки в поле будет закодирован как "", и все поле станет """". Поэтому, если вы видите следующее, например, в Excel:

---------------------------------------
| regular_value |,,,"|  ,"", |"""   |"|
---------------------------------------

CSV-файл будет содержать:

regular_value,",,,""",","""",","""""""",""""

запятая просто инкапсулируется с помощью котировки, так , становится ",".

запятая и цитата должны быть инкапсулированы и процитированы, так что "," становится """,""".

вам нужно процитировать эти значения.
здесь это более подробная спецификация.

Если вы хотите сделать что вы сказали, Вы можете использовать кавычки. Что-то вроде этого

$name = "Joe Blow, CFA.";
$arr[] = "\"".$name."\"";

Итак, вы можете использовать запятую в имени переменной.

в дополнение к точкам в других ответах: одна вещь, которую следует отметить, если вы используете кавычки в 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)

я столкнулся с той же проблемой и цитирует , не помогло. В конце концов, Я заменил , с +, закончил обработку, сохранил вывод в outfile и заменил + С ,. Это может показаться уродливым, но это сработало для меня.

можно использовать Text_Qualifier поле в диспетчере соединений с неструктурированными файлами в as ". Это должно обернуть ваши данные в кавычки и только разделяются запятыми, которые находятся вне кавычек.

во-первых, если значение элемента имеет символ двойной кавычки ("), заменить на 2 символа двойной кавычки ("")

item = item.ToString().Replace("""", """""")

наконец, оберните значение элемента:

слева: с символом двойной кавычки (")

справа: с символом двойной кавычки ( " ) и символом запятой (,)

csv += """" & item.ToString() & ""","

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

двойные кавычки не сработали для меня, это сработало для меня \". Если вы хотите разместить двойные кавычки в качестве примера, вы можете установить \"\". Вы можете построить формулы, например:

fprintf(strout, " \ " =if(C3=1,\"\"\"\",B3)\ "\n");

будет писать в csv: =Если(C3=1,"", B3)

Comments

    Ничего не найдено.