6 / 6 / 3
Регистрация: 28.04.2014
Сообщений: 170
1

Парсинг csv. Неизвестное количество столбцов

17.07.2014, 16:04. Показов 2333. Ответов 16
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Имеем большой csv файл (2 млн записей).
из них 13 тысяч записей - нестандартные, или, вернее сказать. косячные.
Т.е.
почти 2 млн записей имеют строго 13 столбцов(т.е. 12 символов ';'). Для них я создал модель в EF и кидаю в БД.

Но вот в оставшихся 13 тысячах есть хаотичные ';'. Их может быть как 15 так и 20.
Как в таких случаях поступают, если нету ключевого поля(любой из этих полей может повторяться)?

Я для себя вытащил отдельно все нестандартные строчки. Их пример: (1 столбец - количество ';', для себя запихнул)
17;ОБЩЕСТВО С ОГРАНИЧЕННОЙ ОТВЕТСТВЕННОСТЬЮ ЭКОСТАНКОСТРОЙ;,453620,02 ,АБЗЕЛИЛОВСКИЙ Р-Н,ТИРМЕН Д,ЦЕНТРАЛЬНАЯ УЛ,13/2,ЛИТЕРА А;Б;В;Д;Е,;6293/14/28/02;19.05.2014;;Акт органа, осуществляющего контрольные функции;07.05.2014;159;;Иной вид налога и сбора;24442.21;Абзелиловский РОСП;453620 С. АСКАРОВО, УЛ. КОММУНИСТИЧЕСКАЯ, 8 А
14;ООО СТАМСТРОЙ;РОССИЯ,670045,БУРЯТИЯ РЕСП,УЛАН-УДЭ Г,МОХОВАЯ УЛ,3,КОРПУСА,;19204/13/25/03;15.11.2013;20629/12/25/03/СД;Исполнительный лист;23.10.2013;ВС №017483678; ВС №01748;;Обращение взыскания на заложенное имущество;71162975.49;Специализированный отдел по ИОП;670000, Республика Бурятия, г.Улан-Удэ, ул. Бау Ямпилова, д.14
16;ОБЩЕСТВО С ОГРАНИЧЕННОЙ ОТВЕТСТВЕННОСТЬЮ АЛЬЯНС;,423800,16 ,НАБЕРЕЖНЫЕ ЧЕЛНЫ Г,40 ЛЕТ ПОБЕДЫ УЛ,88,ГАРАЖИ 217;218;219;220,;13494/13/57/16;19.03.2013;;Акт органа, осуществляющего контрольные функции;13.03.2013;3532;;Иной вид налога и сбора;2959;ОСП №3 г. Набережные Челны;423802, г.Набережные Челны, бульвар Корчагина, д.13
пример стандартной строчки:
ОАО ГАЗПРОМНЕФТЬ-МОСКОВСКИЙ НПЗ;109429, РОССИЯ, Г. МОСКВА, КАПОТНЯ 2-Й КВ-Л, Д. 1, КОРП. 3,;1/14/99001-ИП;15.01.2007;;Исполнительный лист;25.10.2006;565688;;Иной вид исполнения имущественного характера;745685961.35;Управление по исполнению особо важных исполнительных производств;107996, Россия, г. Москва, , , , ул. Кузнецкий Мост, 16/5, 1,
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
17.07.2014, 16:04
Ответы с готовыми решениями:

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

Curl и парсинг CSV
Приветствую. Сильно не бейте, вопрос будет возможно глупый. Есть csv файл в котором более 1000...

Парсинг CSV файла
Здравствуйте! Помогите пожалуйста, стоит такая задача, нужно сделать парсинг CSV файла, при этом...

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

16
215 / 180 / 79
Регистрация: 02.10.2011
Сообщений: 651
17.07.2014, 16:08 2
Мб там где встречаются случайные ; заэкранировать ?
0
Каратель
Эксперт С++
6609 / 4028 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
17.07.2014, 16:09 3
Цитата Сообщение от Alexeyjke Посмотреть сообщение
Как в таких случаях поступают
пишут скрипт/программу которая из нестандартного формата делает стандартный
0
6 / 6 / 3
Регистрация: 28.04.2014
Сообщений: 170
17.07.2014, 16:35  [ТС] 4
Egor.S,
Вот только там они хаотично в строке расположены. как понять, в каком месте именно они лишние?
Jupiter,

Есть пример?
0
Каратель
Эксперт С++
6609 / 4028 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
17.07.2014, 19:30 5
Цитата Сообщение от Alexeyjke Посмотреть сообщение
Вот только там они хаотично в строке расположены. как понять, в каком месте именно они лишние?
значит шуруй ручками и убирай, а нет так подключай мозги и
Цитата Сообщение от Jupiter Посмотреть сообщение
пишут скрипт/программу которая из нестандартного формата делает стандартный
Цитата Сообщение от Alexeyjke Посмотреть сообщение
Есть пример?
какой ещё пример? вместо тебя этого никто делать не будет
0
6 / 6 / 3
Регистрация: 28.04.2014
Сообщений: 170
18.07.2014, 08:49  [ТС] 6
Jupiter,
Ручками нету смысла, файл перидоически будет скачиваться, и там буду новые записи, где подобная хрень.
и что значит из нестандартного в стандартный формат?
0
Master of Orion
Эксперт .NET
6098 / 4954 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
18.07.2014, 11:17 7
Alexeyjke, если файл не очень большой (меньше 1ГБ), читешь его весь в память, после этого регэкспом проходишь, заменяя ";{2,}" на ";" (регэксп неплохо сделать Compiled). После этого пересохраняешь в файл и читаешь как нормальный формат.

Если файл большой, то разбивать надо на куски. В идеале читать построчно, но яхз, твоя EF вряд ли будет с отдельными строками файла работать.
0
6 / 6 / 3
Регистрация: 28.04.2014
Сообщений: 170
18.07.2014, 11:23  [ТС] 8
Psilon,
Я построчно и работаю. Файл не очень большой ( 700 мб), как раз таки и читаю его в память, потом построчно разбиваю, кидаю в модель и сохраняю EF.

;{2,} - это 2 и более знаков? просто они идут не подряд..
0
Master of Orion
Эксперт .NET
6098 / 4954 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
18.07.2014, 11:34 9
Alexeyjke, а как они тогда идут?
0
6 / 6 / 3
Регистрация: 28.04.2014
Сообщений: 170
18.07.2014, 11:40  [ТС] 10
Цитата Сообщение от Alexeyjke Посмотреть сообщение
17;ОБЩЕСТВО С ОГРАНИЧЕННОЙ ОТВЕТСТВЕННОСТЬЮ ЭКОСТАНКОСТРОЙ;,453620,02 ,АБЗЕЛИЛОВСКИЙ Р-Н,ТИРМЕН Д,ЦЕНТРАЛЬНАЯ УЛ,13/2,ЛИТЕРА А;Б;В;Д;Е,;6293/14/28/02;19.05.2014;;Акт органа, осуществляющего контрольные функции;07.05.2014;159;;Иной вид налога и сбора;24442.21;Абзелиловский РОСП;453620 С. АСКАРОВО, УЛ. КОММУНИСТИЧЕСКАЯ, 8 А
14;ООО СТАМСТРОЙ;РОССИЯ,670045,БУРЯТИЯ РЕСП,УЛАН-УДЭ Г,МОХОВАЯ УЛ,3,КОРПУСА,;19204/13/25/03;15.11.2013;20629/12/25/03/СД;Исполнительный лист;23.10.2013;ВС №017483678; ВС №01748;;Обращение взыскания на заложенное имущество;71162975.49;Специализированный отдел по ИОП;670000, Республика Бурятия, г.Улан-Удэ, ул. Бау Ямпилова, д.14
16;ОБЩЕСТВО С ОГРАНИЧЕННОЙ ОТВЕТСТВЕННОСТЬЮ АЛЬЯНС;,423800,16 ,НАБЕРЕЖНЫЕ ЧЕЛНЫ Г,40 ЛЕТ ПОБЕДЫ УЛ,88,ГАРАЖИ 217;218;219;220,;13494/13/57/16;19.03.2013;;Акт органа, осуществляющего контрольные функции;13.03.2013;3532;;Иной вид налога и сбора;2959;ОСП №3 г. Набережные Челны;423802, г.Набережные Челны, бульвар Корчагина, д.13
смотри, в 1 сообщении: "А;Б;В;Д;Е" выделилось ;, в другом - почему то цифры: 217;218;219;220,;
0
192 / 199 / 82
Регистрация: 11.04.2013
Сообщений: 1,086
18.07.2014, 12:14 11
Такое ощущение что часть полей заполняет человек и именно он ставит ";" не зная что это служебный символ , а часть ";" стравит программа - не отпарсишь ты такое никак ибо нет четкой логики ошибок только в ручную

Советую использовать NOSQL бд не парсить вообще или парсить пару ";" остальное складывать в одно поле BLOB
0
Master of Orion
Эксперт .NET
6098 / 4954 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
18.07.2014, 12:15 12
Alexeyjke, и что? Даже я (человек) не понимаю, как это отличить одно от другого, что уж говорить про программу, которая "догадываться" не умеет по определению.
0
192 / 199 / 82
Регистрация: 11.04.2013
Сообщений: 1,086
18.07.2014, 12:44 13
Хотя не МОЖНО правильно отпарсить

1. Мы знаем в каком столбце должна быть скажем дата 19.05.2014 (к примеру в 10)

2. Иной вид налога и сбора - думаю названий налога тоже не много видов и их можно распознавать и вставлять в нужный столбец

3. И т.д.

закономерности есть - таким макаром можно в неправильных строках отсортировать столбцы и найти ошибки
0
Master of Orion
Эксперт .NET
6098 / 4954 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
18.07.2014, 12:49 14
EVG-1980, можно. Но в регэкспе подобной сложности ошибиться настолько просто, что разработка правильной вариации займет очень много времени и сил
0
192 / 199 / 82
Регистрация: 11.04.2013
Сообщений: 1,086
18.07.2014, 12:56 15
Psilon, о регулярках тут речи не идет

Цитата Сообщение от Alexeyjke Посмотреть сообщение
17;ОБЩЕСТВО С ОГРАНИЧЕННОЙ ОТВЕТСТВЕННОСТЬЮ ЭКОСТАНКОСТРОЙ;,453620,02 ,АБЗЕЛИЛОВСКИЙ Р-Н,ТИРМЕН Д,ЦЕНТРАЛЬНАЯ УЛ,13/2,ЛИТЕРА А;Б;В;Д;Е,;6293/14/28/02;19.05.2014;;Акт органа, осуществляющего контрольные функции;07.05.2014;159;;Иной вид налога и сбора;24442.21;Абзелиловский РОСП;453620 С. АСКАРОВО, УЛ. КОММУНИСТИЧЕСКАЯ, 8 А
Мы знаем что индекс шестизначный и должен стоить в третьем столбце 453620 пробегаем по неправильной строке находи ближайшее 6ти значное число, смотрим до него количество ";" и после него определяем в какой части строки ошибка в левой или в правой...

отбрасываем (к примеру с лева правильно ) остается правая часть далее ищем следующую "уникальную закономерность" к примеру - название налога , потом дату и т.д.
0
6 / 6 / 3
Регистрация: 28.04.2014
Сообщений: 170
18.07.2014, 13:19  [ТС] 16
Цитата Сообщение от EVG-1980 Посмотреть сообщение
Мы знаем что индекс шестизначный и должен стоить в третьем столбце 453620 пробегаем по неправильной строке находи ближайшее 6ти значное число, смотрим до него количество ";" и после него определяем в какой части строки ошибка в левой или в правой...
Было бы всё так просто.. единственные "статичные" данные - это дата. И те не во всех записях.
У остальных даже маску нормально не сделаешь, данные могут быть и цифры, и буквы. и т.п.
0
192 / 199 / 82
Регистрация: 11.04.2013
Сообщений: 1,086
18.07.2014, 13:56 17
Alexeyjke,

Такие закономерности которые кое где ты найдешь кое где не найдешь тебе позволят сделать из 13 тыс неправильных строк скажем 5 тыс ...

Всяко меньше потом в ручную калупать


Еще один вариант у тебя в базе уже гора правильных "Эталонных записей" берем неправильную строку парсим и начинаем искать куски по столбцам в базе

к примеру проверяем по всем столбцам ищем где есть такая строка where столбец № = "Акт органа, осуществляющего контрольные функции"

сочетание разных подходов поможет существенно уменьшить...
0
18.07.2014, 13:56
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.07.2014, 13:56
Помогаю со студенческими работами здесь

Парсинг CSV Файла
Помогите пожалуйста написать код парсера для csv файла на objective-C csv файл состоит из 6...

Парсинг CSV-файла
Всем привет! Есть Excel файл, собственно обычный прайс. Вручную (с удалением логотипа, контактов...

Парсинг CSV (opencsv)
Пытаюсь распарсить CSV с помощью opencsv. Идея такая: InputStreamReader in = ... CSVReader...

Парсинг и сохранение csv файла
есть вот такая реализация сохранения в фаил csv но я бы хотел узнать как можно реализовать такую...

Парсинг CSV (Spine2D *.atlas)
Народ, помогите распарсить кое-какие данные. Есть некий текстовый файл, сразу оговорюсь, что это...

Очистка csv файла от мусора - Парсинг
Ребят, нужна помощь, есть csv файл с почти 1000 строк параметров с текстами, больше половины...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru