Есть ли способ включить запятые в столбцы CSV без нарушения форматирования?
у меня есть два столбца CSV с именем и номером. Некоторые имена людей используют запятые, например Joe Blow, CFA. эта запятая нарушает формат CSV, так как он интерпретируется как новый столбец.
Я прочитал, и наиболее распространенный рецепт, похоже, заменяет этот символ или заменяет разделитель новым значением (например,this|that|the, other).
Я бы очень хотел сохранить разделитель запятых (я знаю, что excel поддерживает другие разделители, но другие интерпретаторы не могут). Я бы тоже хотелось бы сохранить запятую в имени, как Joe Blow| CFA выглядит довольно глупо.
есть ли способ включить запятые в столбцы 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