Russian Qt Forum
Ноябрь 23, 2024, 10:14 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Голосование
Вопрос: Хотите ли Вы в этом разбираться?
Да, хочу - 4 (22.2%)
Было бы полезно, но нет времени - 5 (27.8%)
Нет, это не окупает изучения - 4 (22.2%)
Та ну его нафиг! - 5 (27.8%)
Ваш вариант - 0 (0%)
Всего голосов: 11

Страниц: 1 ... 4 5 [6] 7 8   Вниз
  Печать  
Автор Тема: Хотите ли Вы в этом разбираться?  (Прочитано 51977 раз)
OKTA
Гость
« Ответ #75 : Апрель 25, 2014, 10:55 »

И скорость, скорость обязательно замерьте!  Смеющийся
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #76 : Апрель 25, 2014, 11:00 »

Покажите как вы это распарсите процедурно, а я покажу как это распарсить spirit.
Давайте, только то что m_ax выложил, реальный пример. Улыбающийся
Ну вот Вы и ответили Улыбающийся То есть вот так "достать из широких штанин" не получится. Усилия все равно придется прилагать, даже владея хорошими тулзами. Как минимум структуры данных набросать, правила куда-то приткнуть и.т.п., набежит немало. Поэтому речь идет о сокращении кода/усилий. Окупит ли оно себя? На таком простом примере (и даже на приведенном m_ax) - нет, лобовое решение дешевле.

Что касается более сложных задач (типа синтаксис С++) - то да, там лезть в лоб неуместно. Ну придется что-то "привлекать", напр Scintilla содержит парсеры для неск десятков языков.
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #77 : Апрель 25, 2014, 11:03 »

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

нет, лобовое решение дешевле.
Традиционное голословное утверждение, непонятно откуда взявшееся. Давайте проверим. Выкладывайте свое решение. Улыбающийся

Я так понимаю, что книг в этот формате в сети полно, на чем тестировать есть. Вот и погоняем.
« Последнее редактирование: Апрель 25, 2014, 11:18 от Old » Записан
m_ax
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2095



Просмотр профиля
« Ответ #78 : Апрель 25, 2014, 11:20 »

Цитировать
Я так понимаю, что книг в этот формате в сети полно, на чем тестировать есть.
С радостью предоставлю материал для тестов)
Если до тестов, вообще, дойдёт.. Что то боюсь, простое народное решение от igors мы так и не увидим( 
Записан

Над водой луна двурога. Сяду выпью за Ван Гога. Хорошо, что кот не пьет, Он и так меня поймет..

Arch Linux Plasma 5
xokc
Птица говорун
*****
Offline Offline

Сообщений: 976



Просмотр профиля
« Ответ #79 : Апрель 25, 2014, 12:31 »

Вы правда считаете, что все что является г..ном для вас, на самом деле г..но? Улыбающийся
Правда НЕ считаю. Поэтому специально написал:
Несколько грубовато и неправильно характеризует объект спора, но вполне применимо к уровню аргументации.
Записан
kamre
Частый гость
***
Offline Offline

Сообщений: 233


Просмотр профиля
« Ответ #80 : Апрель 25, 2014, 12:41 »

Видно, что итераторы не любят некоторые. А что скажете насчет boost::range, насколько удобно пользоваться по сравнению с for/iterators?
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #81 : Апрель 25, 2014, 13:01 »

Давайте проверим. Выкладывайте свое решение. Улыбающийся
Я так понимаю, что книг в этот формате в сети полно, на чем тестировать есть. Вот и погоняем.
С радостью предоставлю материал для тестов)
Если до тестов, вообще, дойдёт.. Что то боюсь, простое народное решение от igors мы так и не увидим( 
Это тоже до боли знакомо: ну вот как-то не срослась "умность великая" - и все льется на простака который делает Улыбающийся Ну да ладно, мне тоже интересно проверить. Только вот делать за m_ax всю работу = некорректно, речь об ограниченном примере. Поэтому гоните ТЗ в котором будет

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

Разумеется исходим из правила "не указал в ТЗ - свободен". Со своей стороны обещаю к ТЗ сильно не придираться и найду время чтобы сделать - ну не "сию минуту", но в ближайшие неск дней.

Если кто еще желает поучаствовать - welcome
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #82 : Апрель 25, 2014, 13:45 »

Видно, что итераторы не любят некоторые. А что скажете насчет boost::range, насколько удобно пользоваться по сравнению с for/iterators?
Где примерчик который можно тупо передрать? Нету - ну так и нафиг оно надо?
Лоховской подход? Безусловно Улыбающийся Прекрасно понимаю что буст ничего просто так не делал бы. Во всех редких случаях когда мне пришлось использовать буст (в основном для работы с полигонами) результаты были просто изумительны. НО - зачем мне надо прилагать усилия без всякой на то необходимости? Программист должен (и обязан) быть "ленивым"  Улыбающийся
Записан
m_ax
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2095



Просмотр профиля
« Ответ #83 : Апрель 25, 2014, 14:46 »

Это тоже до боли знакомо: ну вот как-то не срослась "умность великая" - и все льется на простака который делает Улыбающийся Ну да ладно, мне тоже интересно проверить. Только вот делать за m_ax всю работу = некорректно, речь об ограниченном примере. Поэтому гоните ТЗ в котором будет

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

Разумеется исходим из правила "не указал в ТЗ - свободен". Со своей стороны обещаю к ТЗ сильно не придираться и найду время чтобы сделать - ну не "сию минуту", но в ближайшие неск дней.

Если кто еще желает поучаствовать - welcome

Ссылка на описание bibtex формата: http://www.bibtex.org/Format/
Плюс поддержка комментариев:
символ начало комментария %
символ конца комментария - конец строки
однако \% - началом комментария не является.

По поводу примера: Выкладываю файлик: bibliography.bib, который содержит 4 записи (bibtex_entry)

По поводу структуры данных:
На выходе мы должны иметь список записей bibtex entry.

bibtex_entry должна иметь:
1) key
2) type
3) список полей (tag = content)

Вот возможная реализация:
Код
C++ (Qt)
struct bibtex_entry
{
   std::string citation_key; // for example: @article{citation_key, ...
 
   std::string type; // article, book, inbook, etc.
 
   std::map<std::string, std::string> fields // tag = content
};
 

У нас есть файл с библиографией (bibliography.bib), мы его читаем и на выходе получаем список (list, vector etc.) bibtex_entry

Вообщем то и всё)
« Последнее редактирование: Апрель 25, 2014, 15:47 от m_ax » Записан

Над водой луна двурога. Сяду выпью за Ван Гога. Хорошо, что кот не пьет, Он и так меня поймет..

Arch Linux Plasma 5
_Bers
Бывалый
*****
Offline Offline

Сообщений: 486


Просмотр профиля
« Ответ #84 : Апрель 25, 2014, 22:50 »

И на С можно писать объектно ориентированно при помощи процедур. Это подход, а не конструкции языка.

Приведите пожалуйста, простейший пример оо-кода на языке си.
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #85 : Апрель 26, 2014, 00:33 »

Ну вроде разбирает. Улыбающийся

m_ax, небольшие вопросы:
Как я понял, citation_key это не обязательное поле и может отсутствовать?
Что вообще делать с не комментарием \%, где он может находится, как я понял, только в параметрах полей?
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #86 : Апрель 26, 2014, 09:02 »

Причесал парсер, добавил комментарии описывающие правила разбора.
Все вместе с main занимает 163 строки, это с моим размашистым стилем, если убрать пустые строки, думаю будет где-то 100.
Записан
m_ax
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2095



Просмотр профиля
« Ответ #87 : Апрель 26, 2014, 09:24 »

Ну вроде разбирает. Улыбающийся

m_ax, небольшие вопросы:
Как я понял, citation_key это не обязательное поле и может отсутствовать?
Что вообще делать с не комментарием \%, где он может находится, как я понял, только в параметрах полей?

Нет, citation key обязателен - без него не сослаться на публикацию.. 

Да, если символ \% встретится в поле (content) то он интерпретируется как значёк процента, а не как начало комментария.   
Записан

Над водой луна двурога. Сяду выпью за Ван Гога. Хорошо, что кот не пьет, Он и так меня поймет..

Arch Linux Plasma 5
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #88 : Апрель 26, 2014, 09:33 »

Нет, citation key обязателен - без него не сослаться на публикацию.. 
Все, уже обязателен. Улыбающийся

Да, если символ \% встретится в поле (content) то он интерпретируется как значёк процента, а не как начало комментария.   
Ok, тогда я правильно все понял.
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #89 : Апрель 27, 2014, 09:34 »

В аттаче моя реализация на базе QString Улыбающийся Выделен базовый класс CReader, он ничего не знает о Bib.  Задумка такая: парсить по строкам обычно проще/приятнее, их можно пропускать, отсечь комменты до конца строки не проблема, можно сразу сделать trim и.т.п. Но с др стороны нужны операции захватывающие неск строк. Напр прочитать все в кавычках или в скобках. Вот это CReader и делает.

Ну а порожденный CBibReader уже парит специфику BibTex. Никаких трудностей я не испытал  Улыбающийся

Записан
Страниц: 1 ... 4 5 [6] 7 8   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.12 секунд. Запросов: 25.