умный csv-парсер?

chisto_tolyan

Враг народа
умный csv-парсер?

Возник такой вопрос: как определить, является ли первая строка csv-данных заголовком этих данных?
И как можно определить разделитель csv-данных (попахивает регулярками, но у меня с ними с детства не сложилось(()?
Заранее благодарен за советы и ответы)
 
chisto_tolyan
> И как можно определить разделитель csv-данных
имхо, выбор из самых часто встречающихся данных, исключая такие символы, как "а", "и", "е", ".", "," и т.д.

Хотя, такой символ лучше вводить пользователем или сделать по-умолчанию...
т.к. есть очень большая вероятность ошибки :(
 

Фанат

oncle terrible
Команда форума
если не рассматривать вопрос, как практическую задачу, требующую 100%-й работоспособности, а как интересную головоломку, то вполне можно попробовать порешать
 

chisto_tolyan

Враг народа
как определить является ли первая строка заголовком или же просто строкой данных что-то вообще на ум не приходит)
Разделитель может быть ".", ",", ";" и "|". Тут можно искать наиболее часто встречающийся символ, не заключеный в кавычки. для анализа можно брать только одну строку. по идее так?или есть какие-нибудь предложения?
 

chisto_tolyan

Враг народа
Фанат
а без показа юзеру?)типа автодетект формата csv файла. юзер аплодит файл, скрипт его разбирает и если есть заголовок - выводит поля с заголовками, если нету выводит без заголовков...что-то не доходит как ето определить...
 

Фанат

oncle terrible
Команда форума
а без показа юзеру
а зачем?

-~{}~ 30.01.06 13:17:

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

Dor

Новичок
Как вариант - в строке заголовка, обычно одно поле заполненное, остальные пустые.
Две подряд аналогичных строки - значит вторая и последующие подобные строки подзаголовоки, до тех пор, пока не встретятся опять две строки.
Так можно "интеллектуальный" сделать парсер для любой степени вложенности заголовков.
Я парсил так прайс с кучей заголовков.
Loshadka
... и количество этих символов в строках д.б. одинаково
 

Фанат

oncle terrible
Команда форума
Dor
твоё понимание слова "заголовок" разительно отличается от того, что имеет в виду автор вопроса
 

chisto_tolyan

Враг народа
http://www.magicparser.com/demo
вот тут как-то получается определить заголовок файла) но сам парсер у них кривоват))
в моем понимании заголовок - первая строка, содержащая имена полей.типа:
ид,название,вес,рост,цена - заголовок
0,бла-бла,100,200,30 - данные
 
chisto_tolyan
Полностью согласен с Фанат-ом, провести анализ файла и спросить у пользователя по поводу разделителей, заголовка и т.д.

Программно определить заголовок не всегда возможно, пример:
Имя Специальность
Вася шахтер
Петя учитель
 

chisto_tolyan

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

Фанат

oncle terrible
Команда форума
что-то не совсем понимаю, ведь и данные могут быть строками.
задача определить когда возможно,
интересно, когда местные посетители начнут думать ХОТЯ БЫ над тем, что сами же пишут строчкой выше?
 

chisto_tolyan

Враг народа
запутался уже))подведем итоги)
1.сначала определяем разделитель:
считаем кол-во незакавыченных символов ".", ",", ";", "|" (кстати, как считать символы, которые не в кавычках?с регулярками туго((). Символ который встречается чаще всех - разделитель.
2.определяем есть ли заголовок:
берем первые 3 ряда, разбиваем на поля по найденому разделителю, и сравниваем типы всех полей. Если тип каждого поля 1 ряда == типам полей 2 и 3 ряда, значит заголовка нет, иначе - первый ряд есть заголовок.
решение конечно подойдет не для всех случаев, но для большинства должно подойти. Есть какие-либо предложения?
 
chisto_tolyan
3. Показываем все это пользователю, если мы правильно провели анализ, то выполняем требуемые действия, если нет, то, например, просим пользователя указать нам разделитель и сообщить: "заголовок ли первая строка"...
 

chisto_tolyan

Враг народа
Loshadka
эт конечно)

еще вопрос по регулярке:
надо посчитать кол-во вхождений символа в строку, если этот символ не находится между кавычками. С регулярками у меня туго, поэтому прошу помощи у общества)
 
Сверху