Разбор CSV с запятыми в полях - PullRequest
0 голосов
/ 16 июня 2011

У меня есть CSV-файл с запятыми внутри полей, которые не заключены. К сожалению, я должен разобрать этот файл и не могу заменить его на правильно отформатированный.

Я действительно даже не знаю, с чего начать.

Ответы [ 4 ]

2 голосов
/ 17 июня 2011

OK.Я вижу следующее: у вас есть около 8000 строк, в которых по существу есть синтаксическая ошибка CSV.Вы можете вручную выяснить, какие они есть, но ручное исправление 8000 записей - это немного.

Очевидным первым подходом было бы попытаться выяснить, как можно вручную определить, какие столбцы имеют эту проблему.Если это то, что вы можете определить правила, вы в бизнесе.Если это достаточно просто, вы можете написать небольшой макрос текстового редактора, чтобы просмотреть файл и сделать это за вас.Если ваш текстовый редактор не поддерживает макросы.Используйте awk.Если у вас Windows и у вас нет awk, тогда получите его .

Если это слишком сложно, исправьте вашу реальную проблему .Исправьте все, что сгенерировало этот CSV-файл, чтобы сгенерировать его правильноЕсли это был чей-то код, к которому у вас нет доступа, скажите им, чтобы это исправить.«Вы генерируете 8000 непарсируемых записей» - это довольно хороший аргумент в моей книге.Рано или поздно они, вероятно, сгенерируют новую версию этого файла для вас, чтобы обработать, так что это действительно правильная вещь.

1 голос
/ 16 июня 2011

Вероятно, вы ничего не можете с этим сделать, кроме анализа записей вручную в текстовом редакторе. Разделители запятых практически бесполезны, если не существует заметного способа отличить их от допустимых запятых в данных.

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

0 голосов
/ 17 июня 2011

Я думаю, что лучшее, на что вы можете надеяться, это 80% автоматический, а это значит, что вы будете делать более 1000 лучших случаев вручную.Вам просто нужно быть умным в отношении данных, которые там есть.Прочитайте каждую строку и посчитайте запятые.Если это правильное количество, запишите его в новый файл.Если их слишком много, отправьте их обработчику исключений.

Начните с того, что вы абсолютно точно знаете о данных.Является ли первый столбец меткой времени?Если вы это знаете, вы можете перейти от «20 запятых, когда должно быть 18» к «19 запятым, когда должно быть 17».Я знаю, что это не совсем поднимает настроение, но это прогресс.Где-то там есть место, подобное названию растения?Может быть, вы можете составить список из хороших данных и искать его в плохих данных.Если в столбце 7 указано название растения, просмотрите список названий растений и посмотрите, существует ли одно из них.Если это так, подсчитайте запятые между этим и началом, а также между этим и концом (или другим хорошим местоположением запятой, которое вы установили).

Если у вас есть уникальные данные, вы можете выполнить регулярное выражение, чтобы найти их местоположениев строке и снова подсчитайте запятые до и после, чтобы увидеть, где это должно быть.Например, если у вас есть широта / долгота или номер детали в формате 99A99-999.

Если вы можете опубликовать пять или десять строк хороших данных, возможно, кто-то может предложить более конкретные способы идентификации столбцов иих местоположения.

Удачи.

0 голосов
/ 16 июня 2011

Вы можете запустить макрос Excel, чтобы переформатировать запятую в какой-то другой символ (скажем, $, что-то, чего нет в вашем файле), а затем, проанализировав файл, вы можете запустить результаты через некоторый код, чтобы переформатировать персонажа обратно в оригинальные запятые.

РЕДАКТИРОВАТЬ: я предполагаю, что у вас есть доступ к исходному файлу, поскольку вы отметили здесь Excel?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...