Поэтому обычно CSV-файл использует запятую и символ возврата в качестве разделителей полей и строк.
Это наталкивается на очевидные проблемы с текстом, который может содержать оба этих символа.
Очевидно, что есть варианты (избегая их), но как люди справляются с этим? Использовать разных персонажей - трубы или тильды? Сбежать от них? Не использовать файлы с разделителями, ведь сейчас 2010 год, и теперь у нас есть XML?
Поищите хотя бы усилия для достойного шанса не увидеть проблем.
(Просто чтобы прояснить, это вопрос из любопытства, а не из-за чего-то более серьезного - это то, с чем я сталкиваюсь раз за разом, играя с данными, всегда обдумываю их, но обычно это немного, ну, грязно, и задавался вопросом, что опыт других людей был).
file-structure
delimited-files
file-handling
Джон Хопкинс
источник
источник
Ответы:
Согласно Википедии :
И, кроме того:
Я не знаю, кто это изобрел, но это эффективно показывает, что в конце концов вам нужно сбежать. Это единственное твердое решение. Все остальное - просто клейкая лента поверх клейкой ленты: может быть, пока работает, но в конечном итоге вы натолкнетесь на случай, когда вам нужно исключение, за исключением исключения, и это не займет много времени, прежде чем вы разберетесь в правилах. это намного сложнее, чем было решение простого escape-символа.
Похоже, что создатели CSV сначала пытались избежать запятых, придумав специальный синтаксис в двойных кавычках, который позволял сохранять запятые, но затем кто-то тоже хотел сохранить символы в двойных кавычках, поэтому им пришлось бежать в этот момент - как ни странно с помощью двойная кавычка как escape-символ. Если бы они решили, во-первых, правильно сбежать, синтаксис был бы теперь проще.
источник
Я предполагаю, что у вас есть что-то вроде этого:
Если строки, содержащие разделитель не указаны или убежали, вы не имеете реальный надежный способ разбора файла.
Вы можете, однако, изучить данные для анализа и сделать такие выводы:
Вы должны написать парсер для обработки подобных вещей, но это не должно быть сложным.
По моему опыту, импорт массивных дампов из чего-то вроде Excel всегда приводит к необходимости вернуться назад и просмотреть некоторые странности. Ваша задача состоит в том, чтобы дать вашей программе только достаточно здравого смысла в отношении данных , так что он не делает сумасшедшие вставки. Затем просмотрите, что было зарегистрировано и вымойте / ополосните / повторите.
Однажды я написал внутренний FAQ для небольшой компании, которая использовала все рабочие станции Ubuntu. Часть FAQ содержала «горячие клавиши», и мне пришло в голову разделитель. Ну, ответы, как правило, также были разделены символом (например, grep foo | что-то) и не заключены в кавычки или не экранированы. Я чувствую эту боль :)
источник
Ничего плохого в CSV до определенного момента
CSV хорошо работает для жестко определенных данных, которые вряд ли изменят формат и не доставят много сюрпризов парсеру получателей.
Вот удобный список больших ошибок:
Вы можете подойти к этому с помощью заголовка метаданных, который описывает, как поля должны быть проанализированы, но тогда вы можете просто использовать XML. Именно из-за этого вида беспорядка CSV свободной формы это было изобретено. Подход XML кажется слишком тяжелым для того, что, на первый взгляд, может быть простой проблемой.
Популярной альтернативой является стратегия «странный разделитель символов». Это позволяет обойти многие из вышеупомянутых проблем, потому что вы используете что-то вроде | (труба) символ для разграничения полей и CRLF для завершения записи. Это не решает проблему многострочного поля (если только вы не используете счетчик поля), но вы получаете хорошо отформатированные строки для людей.
В целом, если вы просто ищете простой способ обработки файлов такого типа, то в мире Java вы можете просто использовать OpenCSV . Таким образом вы абстрагируете все проблемы в установленные рамки.
источник
CSV по-прежнему является допустимым форматом во многих ситуациях, тем более что для клиента это все же самый простой способ записать данные, которые необходимо импортировать в ваше приложение. Мало кто из наших клиентов любит иметь дело с XML, возможно, потому что он очень многословен и имеет все эти «страшные» угловые скобки. Им гораздо проще обернуть свои мозги вокруг простого списка элементов, разделенных согласованным символом, а также согласиться с тем, что один и тот же символ не будет разрешен в содержимом поля.
Тем не менее, вы все равно должны правильно обрабатывать ввод и проверять ситуации, когда они используют недопустимые символы. Я начал использовать FileHelpers для моего анализа CSV.
источник
я обычно придерживаюсь стандарта и избегаю их. в большинстве языков программирования есть хорошая встроенная поддержка или хорошая библиотека.
это зависит от ситуации, какой формат будет использоваться, и CSV является разумным форматом для обмена простыми структурами формата данных.
источник
Забудьте CSV, используйте JSON . Легко написать, легко разобрать. XML это так 2005 .
источник
Обычно я получаю TSV (значения, разделенные табуляцией), а не CSV-файл, перетаскиваю файл в Emacs и вижу, какой из нескольких необычных символов он НИКОГДА не использует ($ обычно здесь хороший выбор), а затем я конвертирую все вкладки в $.
Оттуда GNU AWK можно сказать использовать $ в качестве разделителя полей, а Боб - твой дядя.
источник