Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Парсер ini файлов 
V
    Опции темы
zim22
Дата 25.6.2009, 08:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

Репутация: 24
Всего: 69



Цитата(Andrew121 @  25.6.2009,  07:38 Найти цитируемый пост)
Дружище, пощитай сколько из них сказали тебе спасибо. И делай выводы............

Cheloveck, только не сделайте неправильные smile


--------------------
PM MAIL   Вверх
Andrew121
Дата 25.6.2009, 08:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 86
Регистрация: 21.6.2009

Репутация: нет
Всего: 1



Цитата(zim22 @  25.6.2009,  08:42 Найти цитируемый пост)
только не сделайте неправильные

Это уже как получится.
Кто на что учился...

Добавлено через 1 минуту и 3 секунды
Lazin, Спасибо что не проигнорировали.
1.
PM MAIL   Вверх
Rififi
Дата 25.6.2009, 09:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1254
Регистрация: 9.3.2008

Репутация: 11
Всего: 36



Вы хотите недочётов - их есть у меня! (Ж

нет итерации
нет поиска по предикату
нет поддержки комментариев в конце строки
нет соответствия именам функций load-save, read-write
нет возможности указывать настройку case-insensetive
нет возможности байндинга к переменным в коде
пустые строки гонятся через весь цикл
комменты не учитываются
повторы переменной не поддерживаются
multi-threading не поддерживается
нельзя делать переменные без секций
нельзя раскрывать переменные среды вида: AAA = ${WINDIR}\SYSTEM32\cmd.exe
нет типизации - всё гонится в string
неправильно парсится строка вида A = (B=C)
не исключающие друг-друга проверки в главном цикле парсинга
многострочные параметры не поддерживаются
load-save одного и того же файла уничтожает все комментарии
пустые секции также уничтожаются
допускаются левые имена как в переменных, так и в секциях
если записывать пустые данные в существующий файл, то функция write уничтожает его
использование iterator вместо const_iterator

потом уже просто надоело их находить smile
PM MAIL   Вверх
Andrew121
Дата 25.6.2009, 09:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 86
Регистрация: 21.6.2009

Репутация: нет
Всего: 1



Цитата(Rififi @  25.6.2009,  09:27 Найти цитируемый пост)
нет поддержки комментариев в конце строки

Цитата(Rififi @  25.6.2009,  09:27 Найти цитируемый пост)
комменты не учитываются

Поясните пожалуйста.


Цитата(Rififi @  25.6.2009,  09:27 Найти цитируемый пост)
повторы переменной не поддерживаются

Поясните.


Цитата(Rififi @  25.6.2009,  09:27 Найти цитируемый пост)
нельзя делать переменные без секций

А разве в стандартном ини такое поддерживается?


Цитата(Rififi @  25.6.2009,  09:27 Найти цитируемый пост)
нельзя раскрывать переменные среды вида: AAA = ${WINDIR}\SYSTEM32\cmd.exe

Вы полагаете, что этим должны заниматься функции манипуляции ини файлом?


Цитата(Rififi @  25.6.2009,  09:27 Найти цитируемый пост)
нет типизации - всё гонится в string

Имеете в виду что-то типа variant?


Цитата(Rififi @  25.6.2009,  09:27 Найти цитируемый пост)
неправильно парсится строка вида A = (B=C)

Опять же - А разве в стандартном ини такое поддерживается?

С остальным согласен.
2.
PM MAIL   Вверх
Lazin
Дата 25.6.2009, 10:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

Репутация: 41
Всего: 154



Цитата(Rififi @  25.6.2009,  09:27 Найти цитируемый пост)
multi-threading не поддерживается

а зачем он там? в несколько потоков парсить ini файл? smile 
PM MAIL Skype GTalk   Вверх
Andrew121
Дата 25.6.2009, 10:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 86
Регистрация: 21.6.2009

Репутация: нет
Всего: 1



Цитата(Lazin @  25.6.2009,  10:01 Найти цитируемый пост)
в несколько потоков парсить ini файл?

Я не представляю реального примера. Но теоретически...возможно.
PM MAIL   Вверх
UnrealMan
Дата 25.6.2009, 13:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 722
Регистрация: 30.3.2006

Репутация: 27
Всего: 32



Цитата(Cheloveck @  25.6.2009,  00:30 Найти цитируемый пост)
Эксцепшен возникнет только от new, но это должно пользовотельское приложение обработать. 

И в каком же состоянии будет пребывать объект? Что будет при вызове его деструктора?

Цитата(Rififi @  25.6.2009,  09:27 Найти цитируемый пост)
нет поиска по предикату

А зачем?

Цитата(Rififi @  25.6.2009,  09:27 Найти цитируемый пост)
нет поддержки комментариев в конце строки

Как отличать комментарии от данных, не являющихся комментариями?

Цитата(Rififi @  25.6.2009,  09:27 Найти цитируемый пост)
multi-threading не поддерживается

Для этого можно использовать синхронизирующий прокси.
PM MAIL   Вверх
Cheloveck
Дата 25.6.2009, 14:51 (ссылка) |  (голосов:3) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1578
Регистрация: 26.7.2008
Где: Тула

Репутация: 3
Всего: 32



По пунктам
Цитата

нет итерации

это зачем?

Цитата

нет поиска по предикату

Всегда считал, что все ключи заранее известны. Поиск по предикату явно лишний.

Цитата

нет поддержки комментариев в конце строки

а где она есть? Единого стандарта на INI файлы нет. Я читал, что комменты в конце строки потдеживают только некотроые программы.

Цитата

нет соответствия именам функций load-save, read-write

Хорошо, просмотрю код и поправлю.

Цитата

нет возможности указывать настройку case-insensetive

ниразу не предполагалась. Это замедлит работу, а нужно ли? Мне нет, код писался в первую очередь для себя.

Цитата

нет возможности байндинга к переменным в коде

предполагается работа только с копиями объектов, никакого доступа к оригиналу. Хочешь изменить - обнови. Это достаточно распространённый подход, я не знаю, почему он вызвал недоумение. Наверное, потому что хочется просто придраться.

Цитата

пустые строки гонятся через весь цикл

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

Цитата

комменты не учитываются

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

Цитата

повторы переменной не поддерживаются

Я должен вернуть две строки? Брось, это уже перебор. Никто не потдерживает повторы.

Цитата

multi-threading не поддерживается

А зачем?

Цитата

нельзя делать переменные без секций

Можно. loadGlobalSection, но только, если секций в файле нет. Смешанных типов никогда не видел. Либо есть секции, либо их нет вообще.

Цитата

нельзя раскрывать переменные среды вида: AAA = ${WINDIR}\SYSTEM32\cmd.exe

Угу, а ещё не выполняет команды оболочки и не перезагружает компьютер, если он завис...

Цитата

нет типизации - всё гонится в string

Так везде. Ну, допустим в VCL встроен конвертор. А надо оно? Руки на что? Эта фанкция тут так же не нужна. Данные хранятся в строках и дожны быть в них представлены.

Цитата

неправильно парсится строка вида A = (B=C)

Такие строки хранить запрещено, не знаю как у всех, но у меня нельзя.

Цитата

не исключающие друг-друга проверки в главном цикле парсинга

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

Цитата

многострочные параметры не поддерживаются

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

Цитата

load-save одного и того же файла уничтожает все комментарии

Кажется я об этом уже сказал.

Цитата

пустые секции также уничтожаются

Если ты захочешь что-то написать в эту секцию, она появится. Зачем нужны пустые секции? Ну, ладно здесь я ещё более или менее согласен.

Цитата

допускаются левые имена как в переменных, так и в секциях

Левые? это какие? В секциях любые символы кроме [, = и ]. А чем плохое имя секции &%*/--, если ты об этом?

Цитата

если записывать пустые данные в существующий файл, то функция write уничтожает его

А это не логично? Загрузи файл и допиши свои пустые данные? Вообще, бред какой-то...

Цитата

использование iterator вместо const_iterator

Ну, если не заметил, то функции это вспомогательные и объявлены в cpp файле. И я меняю значение переменной обращаясь к итератору.


Цитата(UnrealMan @  25.6.2009,  14:43 Найти цитируемый пост)
И в каком же состоянии будет пребывать объект? Что будет при вызове его деструктора?

Если юзер обработает bad_alloc, то всё будет отлично, если не обработает, то программа повиснет на любом из этих исключений.

Добавлено @ 15:00
Цитата(Andrew121 @  25.6.2009,  08:38 Найти цитируемый пост)
Cheloveck, Дружище, пощитай сколько из них сказали тебе спасибо. И делай выводы............ 

Я сделал выводы. Боюсь, что Вы их посчитаете неправильными, но я больше никогда не буду выкладывать код. Даже если он будет идеальным, всё-равно его обосрут с ног до головы. Потому что у халатика нет преламутровых пуговец.

ЗЫ Тема закрыта, линки убрал. Обсуждать больше нечего.

Это сообщение отредактировал(а) Cheloveck - 25.6.2009, 18:05


--------------------
user posted image
PM Jabber   Вверх
Andrew121
Дата 25.6.2009, 16:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 86
Регистрация: 21.6.2009

Репутация: нет
Всего: 1



Цитата(Cheloveck @  25.6.2009,  14:51 Найти цитируемый пост)
Я сделал выводы. Боюсь, что Вы их посчитаете неправильными, но я больше никогда не буду выкладывать код. Даже если он будет идеальным, всё-равно его обосрут с ног до головы. Потому что у халатика нет преламутровых пуговец.

Что и требовалось доказать.
PM MAIL   Вверх
zim22
Дата 25.6.2009, 17:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

Репутация: 24
Всего: 69



Цитата(Andrew121 @  25.6.2009,  16:43 Найти цитируемый пост)
всё-равно его обосрут с ног до головы.

это же здорово, когда код обсирают! гораздо хуже, когда его хвалят. вы просто "фишку не рубите" smile
***
ревью кода

Это сообщение отредактировал(а) zim22 - 25.6.2009, 17:38


--------------------
PM MAIL   Вверх
UnrealMan
Дата 25.6.2009, 18:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 722
Регистрация: 30.3.2006

Репутация: 27
Всего: 32



Цитата(Cheloveck @  25.6.2009,  14:51 Найти цитируемый пост)
Если юзер обработает bad_alloc, то всё будет отлично

Ну, если не считать того, что программа через некоторое время, скорее всего, издохнет на фиг из-за двойного удаления, всё будет просто превосходно smile 
PM MAIL   Вверх
jonie
Дата 25.6.2009, 19:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 15
Всего: 118



на мой взгляд стоит делать такую библиотеку так:
Для начала реализовать SAIni (simple api for ini) парсер, путь даже на С чистом. Сам файл зачитывать нет нужды в память - достаточно описывать элементы как <смещение, длина>. Работать с файлом как проекцией на память (хотя это и не обязательно). Также парсер для записи потоковой нужен. Вопросы кодировки решаются тут.

Далее над этим парсером надстраивается DOM парсер. В простейшем случае это вектор базовых IElement. В нем достаточно одного метода - ELEMENT_TYPE GetType(). Например Section наследуется от IElement и дополнительно содержит vector элементов типа "ПолеСЗначением". Ну и также присуствуют типы : Поле, Значение, Комментарий. Значение абстрактное, и может быть ЗначениеТипаInt, ЗначениеТипаFloat, ЗначениеТипаСтрока etc. При чтении используется "ЗначетиеТипаСтрока". Тут есть где развернуться шаблонолюбителям 8)

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

Как вам идея ?

/* если ктото не чостет это бредом, то можно поучавствовать в создании - одному лень и скучно */

Это сообщение отредактировал(а) jonie - 25.6.2009, 19:58


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
Rififi
Дата 25.6.2009, 22:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1254
Регистрация: 9.3.2008

Репутация: 11
Всего: 36



UnrealMan
нет поиска по предикату 
А зачем?

stl-way (:

Как отличать комментарии от данных, не являющихся комментариями?
очень просто: если символ комментария находится внутри строкового литерала - то он считается частью данных. иначе - комментарий.
PM MAIL   Вверх
UnrealMan
Дата 26.6.2009, 12:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 722
Регистрация: 30.3.2006

Репутация: 27
Всего: 32



Цитата(Rififi @  25.6.2009,  22:39 Найти цитируемый пост)
нет поиска по предикату 
А зачем?

stl-way

Ini-файл - это по сути хранилище ассоциативного массива ассоциативных массивов. По названию секции находим секцию, по названию ключа находим значение. Покажи, где std::map реализует поиск по предикату.

Цитата(Rififi @  25.6.2009,  22:39 Найти цитируемый пост)
Как отличать комментарии от данных, не являющихся комментариями?
очень просто: если символ комментария находится внутри строкового литерала - то он считается частью данных. иначе - комментарий. 

Ах, тут ещё строковые литералы надо вводить. А вслед за этим escape sequences, universal character names и директивы препроцессора C? smile Но вот беда: такая натюнингованная структура по-прежнему не будет позволять удобно хранить вложенные секции. Если хочется чего-то продвинутого, то лучше сразу отказаться от ini-файлов и использовать другой формат.
PM MAIL   Вверх
jonie
Дата 26.6.2009, 18:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 15
Всего: 118



ini файл хорош тем, в отличие, например от xml что не требует специальных знаний вроде перечня символов подлежащих экранированию, DTD схем, XSD схем и т.д.


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1120 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.