![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
Cheloveck |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1578 Регистрация: 26.7.2008 Где: Тула Репутация: 3 Всего: 32 |
Надоело, что виндовые функции семейства *PrivateProfile* каждый раз открывают и читают файл. К тому же функционал очень сомнительный. Написал свою кроссплатформенную версию парсера ini файлов. В инете видел один примерчик, написанный на boost.spirit, но он меня не впечатлил, болше ничего хорошего не находил. Мой парсер использует объектную модель документа (DOM) и способен загружать файл как целиком, так и по частям (равно как и записывать). Это мой первый опыт написания открытого кода, так что необессудте. Сообщайте о любых багах и недочётах в ЛС по e-mail или на jabber, можно и в эту тему.
P.S. Тему можно удалить, исходники убрал Это сообщение отредактировал(а) Cheloveck - 25.6.2009, 15:01 -------------------- ![]() |
|||
|
||||
zim22 |
|
|||
![]() depict1 ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2682 Регистрация: 15.1.2009 Где: Украина Репутация: 24 Всего: 69 |
мне в операторе присваивания не понятно несколько моментов: 1) почему возвращается константная ссылка? 2) будет ли ваш код работать правильно, если я отключу assert с помощью #define NDEBUG
|
|||
|
||||
Cheloveck |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1578 Регистрация: 26.7.2008 Где: Тула Репутация: 3 Всего: 32 |
да, интересно, почему?)) Исправлю.
ну, почему бы он и не будет работать? assert - это макрос, и его отключение ни на что не повлияет. -------------------- ![]() |
|||
|
||||
zim22 |
|
||||
![]() depict1 ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2682 Регистрация: 15.1.2009 Где: Украина Репутация: 24 Всего: 69 |
повлияет. если логика кода находилась внутри этого макроса. код будет выглядеть так:
|
||||
|
|||||
Cheloveck |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1578 Регистрация: 26.7.2008 Где: Тула Репутация: 3 Всего: 32 |
zim22, спасибо, поправлю. Да, действительно, что-то такое было у майерса
Добавлено через 5 минут и 20 секунд Поправил -------------------- ![]() |
|||
|
||||
Lazin |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3820 Регистрация: 11.12.2006 Где: paranoid oil empi re Репутация: 41 Всего: 154 |
||||
|
||||
Cheloveck |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1578 Регистрация: 26.7.2008 Где: Тула Репутация: 3 Всего: 32 |
Lazin, не впечатлил не spirit, а примерчик.
-------------------- ![]() |
|||
|
||||
nerezus |
|
|||
![]() Вселенский отказник ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3330 Регистрация: 15.6.2005 Репутация: 3 Всего: 43 |
|
|||
|
||||
azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 81 Всего: 211 |
Cheloveck
Меня больше всего вот этот момент забеспокоил
return NULL; как это работает. Вызывается конструктор принимающий const char*. Каким образом будете проверять что функция сработала нормально? Ни одного удовлетворяющего стандарту метода я не вижу. Да и вообще, скорее всего еще при возврате значения вылетит. Это сообщение отредактировал(а) azesmcar - 23.6.2009, 22:43 |
|||
|
||||
Cheloveck |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1578 Регистрация: 26.7.2008 Где: Тула Репутация: 3 Всего: 32 |
azesmcar, мне представляется, что создастся объект std::string, метод empty() которого вернёт true, но если ты точно знаешь, что будет бяка, то я переделаю на return "";
-------------------- ![]() |
|||
|
||||
azesmcar |
|
||||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 81 Всего: 211 |
![]() ![]() Я бы использовал исключения, возвращать "" как-то некрасиво. Добавлено через 4 минуты и 5 секунд
|
||||
|
|||||
Cheloveck |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1578 Регистрация: 26.7.2008 Где: Тула Репутация: 3 Всего: 32 |
azesmcar, я уже протестил. Исправил на return ""; Исключения тут не нужны ИМХО, строка пустая, если не найдена и всё, кажется логично.
-------------------- ![]() |
|||
|
||||
azesmcar |
|
||||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 81 Всего: 211 |
Строка пустая если 1. Невозможно открыть файл 2. файл открыт, но в
ни разу не зашел. А если там в самом деле пустая строка? Исключениями красиво, но не мне решать конечно ![]() Это сообщение отредактировал(а) azesmcar - 23.6.2009, 22:56 |
||||
|
|||||
Cheloveck |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1578 Регистрация: 26.7.2008 Где: Тула Репутация: 3 Всего: 32 |
azesmcar, хорошо, я подумаю
-------------------- ![]() |
|||
|
||||
Lazin |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3820 Регистрация: 11.12.2006 Где: paranoid oil empi re Репутация: 41 Всего: 154 |
||||
|
||||
jonie |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5613 Регистрация: 21.8.2005 Где: Владимир Репутация: 15 Всего: 118 |
а где Unicode?! Нафига нам нужны устаревшие однобайтовые кодировки?)
-------------------- Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет... |
|||
|
||||
Cheloveck |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1578 Регистрация: 26.7.2008 Где: Тула Репутация: 3 Всего: 32 |
где ты видел ini файлы в юникоде? в юниксе? так там всё и с char'ом всегда работает. -------------------- ![]() |
|||
|
||||
zim22 |
|
|||
![]() depict1 ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2682 Регистрация: 15.1.2009 Где: Украина Репутация: 24 Всего: 69 |
поищите в гугле. они есть. "ini file unicode" |
|||
|
||||
nerezus |
|
|||
![]() Вселенский отказник ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3330 Регистрация: 15.6.2005 Репутация: 3 Всего: 43 |
Cheloveck, просто некоторые люди хотят хранить конфиги разнотипные. И, естественно, уникод нужен.
jonie, с другой стороны utf-8 позволят обходиться без этого и код такой с ним нормально работает. |
|||
|
||||
Cheloveck |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1578 Регистрация: 26.7.2008 Где: Тула Репутация: 3 Всего: 32 |
Была идея использовать std::basic_string вместо std::string и прикрутить шаблоны.... Но я отмёл эту идею как излишнее... юникода не будет!!! Если код действительно заинтересовал, не так уж и сложно изменить его, всё в Ваших руках))
-------------------- ![]() |
|||
|
||||
zim22 |
|
|||
![]() depict1 ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2682 Регистрация: 15.1.2009 Где: Украина Репутация: 24 Всего: 69 |
это одно и тоже
|
|||
|
||||
Cheloveck |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1578 Регистрация: 26.7.2008 Где: Тула Репутация: 3 Всего: 32 |
-------------------- ![]() |
|||
|
||||
zim22 |
|
|||
![]() depict1 ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2682 Регистрация: 15.1.2009 Где: Украина Репутация: 24 Всего: 69 |
Cheloveck, и что?
вы хоть бы объяснили, зачем его привели...
![]() Это сообщение отредактировал(а) zim22 - 24.6.2009, 18:49 |
|||
|
||||
Cheloveck |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1578 Регистрация: 26.7.2008 Где: Тула Репутация: 3 Всего: 32 |
Ну, чтоб показать, что basic_string и string не совсем одно и то же. И то, что если в шаблоне передать wchar_t, то получим юникод. -------------------- ![]() |
|||
|
||||
zim22 |
|
|||
![]() depict1 ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2682 Регистрация: 15.1.2009 Где: Украина Репутация: 24 Всего: 69 |
||||
|
||||
Cheloveck |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1578 Регистрация: 26.7.2008 Где: Тула Репутация: 3 Всего: 32 |
-------------------- ![]() |
|||
|
||||
Rififi |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1254 Регистрация: 9.3.2008 Репутация: 11 Всего: 36 |
Cheloveck,
где ты видел ini файлы в юникоде? а почему не? var = ∰ఋ୬൬乙㊉ даже если они не в юникоде, но сама программа очень даже может быть в нём и что мне теперь, каждый раз перекодировать всё пришедшее из конфига? да ну нафик такое щастие. |
|||
|
||||
Cheloveck |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1578 Регистрация: 26.7.2008 Где: Тула Репутация: 3 Всего: 32 |
Rififi, ничего сложного в перекодировании не вижу, тем блее, что в UNIX системах это будет балластом. Считаю дискуссию по отсутствию юникода не уместной, так как уже ответил, юникода - не будет!!!
-------------------- ![]() |
|||
|
||||
Cheloveck |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1578 Регистрация: 26.7.2008 Где: Тула Репутация: 3 Всего: 32 |
Содержимое C:\test.ini кодируеи в UTF-8 или в UTF-8 без BOM
Смотрим на месаджбокс и удивляемся, как это мы раньше жили. Из эксперимента видим, что виндовые функции чхали на юникод в файлах. Если файл будет в ANSI - всё работает, из чего следует, что функции каждый раз перекодируют, что пришло из конфига. Просто это скрыто. Написать маленькую функцию-декодер самому очень легко. Не думаю, что это должно быть в парсере. Это сообщение отредактировал(а) Cheloveck - 24.6.2009, 21:46 -------------------- ![]() |
||||
|
|||||
Rififi |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1254 Регистрация: 9.3.2008 Репутация: 11 Всего: 36 |
Cheloveck,
... Смотрим на месаджбокс и удивляемся, как это мы раньше жили. ... а потом читаем насчёт поддержки юникода в Windows и офигиваем от того, что поддерживается только UCS-2, безо всяких там UTF-8 вот оно как, однако. |
|||
|
||||
Cheloveck |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1578 Регистрация: 26.7.2008 Где: Тула Репутация: 3 Всего: 32 |
Rififi, иии? от этого работа с UTF-8 файлами не стала другой.
-------------------- ![]() |
|||
|
||||
Rififi |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1254 Регистрация: 9.3.2008 Репутация: 11 Всего: 36 |
а к чему тогда была написана эта кривизна (я про последний пример)?
ты пытаешься засунуть в ucs-2 функцию строку в кодировке utf-8 и радуешься что ничего не получается. Это сообщение отредактировал(а) Rififi - 24.6.2009, 23:31 |
|||
|
||||
Cheloveck |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1578 Регистрация: 26.7.2008 Где: Тула Репутация: 3 Всего: 32 |
Rififi, к тому, что не предполагаются INI файлы в UTF-8. А потдерживать UTF-16/UCS-2 или UTF-32 я не собираюсь вовсе. Пусть сначала Microsoft разбирётся, какую кодировку они хотят использовать. Или же пусть делают как в UNIX, когда есть системная кодировка и все программы корректно с ней работают, используя char.
-------------------- ![]() |
|||
|
||||
jonie |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5613 Регистрация: 21.8.2005 Где: Владимир Репутация: 15 Всего: 118 |
а что, ini файлы только в винде бывают? И только в 1 байтовой и ucs-2 кодировке ?)) хреновый дизайн библиотеки - вот ответ.
Это сообщение отредактировал(а) jonie - 24.6.2009, 23:53 -------------------- Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет... |
|||
|
||||
Cheloveck |
|
||||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1578 Регистрация: 26.7.2008 Где: Тула Репутация: 3 Всего: 32 |
файл в UTF-8
О чём ещё говорить, я не знаю. В UNIX'е это работает без проблем. Не устраивает библиотека, не пользуйте. Гоаорить, что хреновая не надо. Она именно такая, как была задумана. Напишите лучше, слава Богу. Да, расскажите... -------------------- ![]() |
||||||
|
|||||||
Rififi |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1254 Регистрация: 9.3.2008 Репутация: 11 Всего: 36 |
Cheloveck,
... к тому, что не предполагаются INI файлы в UTF-8 ... при чём здесь таки utf-8 я так и не понял, ну да ладно, не суть. вот что странно - то ты недочётов хотел, то "напишите сами". что касается первого - пожалуйста, получите: отсутствие поддержки юникода под windows в кроссплатформенной библиотеке для меня означает означает жирный минус (а точнее - крест) на этой библиотеке. Пусть сначала Microsoft разбирётся, какую кодировку они хотят использовать что удивительно, они таки разобрались. уже почти 20 лет как (когда там windows 3.0 вышла? ). о как оно получается. |
|||
|
||||
UnrealMan |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 722 Регистрация: 30.3.2006 Репутация: 27 Всего: 32 |
||||
|
||||
Cheloveck |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1578 Регистрация: 26.7.2008 Где: Тула Репутация: 3 Всего: 32 |
Rififi, хорошо. Расскажи, что за юникод я должен поддерживать? По моему неведению, я всегда считал UTF-8 юникодом. Покажи как надо читать файлы в "настоящем" юникоде.
Добавлено через 3 минуты и 12 секунд В плане? Ссылку я уже убрал. Эксцепшен возникнет только от new, но это должно пользовотельское приложение обработать. Поконкретнее, пожалуйста. -------------------- ![]() |
|||
|
||||
Andrew121 |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 86 Регистрация: 21.6.2009 Репутация: нет Всего: 1 |
Cheloveck, Мдя...печально вышло
![]() |
|||
|
||||
Lazin |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3820 Регистрация: 11.12.2006 Где: paranoid oil empi re Репутация: 41 Всего: 154 |
UTF-* это не юникод, это кодировки, юникод это стандарт ![]() что-бы использовать твой код в linux, нужно сначала создать локаль ru_RU.cp1251 командой locale-gen |
|||
|
||||
Andrew121 |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 86 Регистрация: 21.6.2009 Репутация: нет Всего: 1 |
||||
|
||||
jonie |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5613 Регистрация: 21.8.2005 Где: Владимир Репутация: 15 Всего: 118 |
Andrew121 самый употребимый язык на планете - китайский (да, да, не английский). вот и думай. Не поддерживать юникод в своих программах - абсолютно неверно и не дальновидно.
-------------------- Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет... |
|||
|
||||
Andrew121 |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 86 Регистрация: 21.6.2009 Репутация: нет Всего: 1 |
jonie, Ваше замечание принял.
А что же с моим предложением? Пожалуйста без намеков и двусмысленности. |
|||
|
||||
Andrew121 |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 86 Регистрация: 21.6.2009 Репутация: нет Всего: 1 |
Cheloveck, Дружище, пощитай сколько из них сказали тебе спасибо. И делай выводы............
|
|||
|
||||
Lazin |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3820 Регистрация: 11.12.2006 Где: paranoid oil empi re Репутация: 41 Всего: 154 |
отписываюсь, допустим, в ini файле хранится строчка
![]() Добавлено через 2 минуты и 32 секунды даже больше, рассчитывать на то, что путь к файлу будет состоять только символов, чей код <128 (латинские символы, числа итд) - наивно ![]() |
|||
|
||||
zim22 |
|
|||
![]() depict1 ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2682 Регистрация: 15.1.2009 Где: Украина Репутация: 24 Всего: 69 |
||||
|
||||
Andrew121 |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 86 Регистрация: 21.6.2009 Репутация: нет Всего: 1 |
||||
|
||||
Rififi |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 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 потом уже просто надоело их находить ![]() |
|||
|
||||
Andrew121 |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 86 Регистрация: 21.6.2009 Репутация: нет Всего: 1 |
Поясните пожалуйста. Поясните. А разве в стандартном ини такое поддерживается?
Вы полагаете, что этим должны заниматься функции манипуляции ини файлом? Имеете в виду что-то типа variant? Опять же - А разве в стандартном ини такое поддерживается? С остальным согласен. 2. |
|||
|
||||
Lazin |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3820 Регистрация: 11.12.2006 Где: paranoid oil empi re Репутация: 41 Всего: 154 |
а зачем он там? в несколько потоков парсить ini файл? ![]() |
|||
|
||||
Andrew121 |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 86 Регистрация: 21.6.2009 Репутация: нет Всего: 1 |
||||
|
||||
UnrealMan |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 722 Регистрация: 30.3.2006 Репутация: 27 Всего: 32 |
И в каком же состоянии будет пребывать объект? Что будет при вызове его деструктора? А зачем? Как отличать комментарии от данных, не являющихся комментариями? Для этого можно использовать синхронизирующий прокси. |
|||
|
||||
Cheloveck |
|
||||||||||||||||||||||||||||||||||||||||||||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1578 Регистрация: 26.7.2008 Где: Тула Репутация: 3 Всего: 32 |
По пунктам
это зачем?
Всегда считал, что все ключи заранее известны. Поиск по предикату явно лишний.
а где она есть? Единого стандарта на INI файлы нет. Я читал, что комменты в конце строки потдеживают только некотроые программы.
Хорошо, просмотрю код и поправлю.
ниразу не предполагалась. Это замедлит работу, а нужно ли? Мне нет, код писался в первую очередь для себя.
предполагается работа только с копиями объектов, никакого доступа к оригиналу. Хочешь изменить - обнови. Это достаточно распространённый подход, я не знаю, почему он вызвал недоумение. Наверное, потому что хочется просто придраться.
Пустые строки гонятся, если находятся между комментами. Ибо я стараюсь сохранить комменты между секциями в первозданном виде.
где не учитываются? если с файлом целиком работать? да, не учитываются. Не представляю, как можно хранить ещё и комменты, да и зачем?
Я должен вернуть две строки? Брось, это уже перебор. Никто не потдерживает повторы.
А зачем?
Можно. loadGlobalSection, но только, если секций в файле нет. Смешанных типов никогда не видел. Либо есть секции, либо их нет вообще.
Угу, а ещё не выполняет команды оболочки и не перезагружает компьютер, если он завис...
Так везде. Ну, допустим в VCL встроен конвертор. А надо оно? Руки на что? Эта фанкция тут так же не нужна. Данные хранятся в строках и дожны быть в них представлены.
Такие строки хранить запрещено, не знаю как у всех, но у меня нельзя.
Что должно чего исключать? Если найдена секция, то проверка на запись проходить не будет, а если коммент - то ни запись, ни секция парситься не будет.
Формат хранения несеольких строк должен определятся пользовотелем. К этому выводу я пришёл, когда задавался вопросом хранения многострочных значений
Кажется я об этом уже сказал.
Если ты захочешь что-то написать в эту секцию, она появится. Зачем нужны пустые секции? Ну, ладно здесь я ещё более или менее согласен.
Левые? это какие? В секциях любые символы кроме [, = и ]. А чем плохое имя секции &%*/--, если ты об этом?
А это не логично? Загрузи файл и допиши свои пустые данные? Вообще, бред какой-то...
Ну, если не заметил, то функции это вспомогательные и объявлены в cpp файле. И я меняю значение переменной обращаясь к итератору.
Если юзер обработает bad_alloc, то всё будет отлично, если не обработает, то программа повиснет на любом из этих исключений. Добавлено @ 15:00
Я сделал выводы. Боюсь, что Вы их посчитаете неправильными, но я больше никогда не буду выкладывать код. Даже если он будет идеальным, всё-равно его обосрут с ног до головы. Потому что у халатика нет преламутровых пуговец. ЗЫ Тема закрыта, линки убрал. Обсуждать больше нечего. Это сообщение отредактировал(а) Cheloveck - 25.6.2009, 18:05 -------------------- ![]() |
||||||||||||||||||||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||||||||||||||||||||
Andrew121 |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 86 Регистрация: 21.6.2009 Репутация: нет Всего: 1 |
||||
|
||||
zim22 |
|
|||
![]() depict1 ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2682 Регистрация: 15.1.2009 Где: Украина Репутация: 24 Всего: 69 |
это же здорово, когда код обсирают! гораздо хуже, когда его хвалят. вы просто "фишку не рубите" ![]() *** ревью кода Это сообщение отредактировал(а) zim22 - 25.6.2009, 17:38 |
|||
|
||||
UnrealMan |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 722 Регистрация: 30.3.2006 Репутация: 27 Всего: 32 |
||||
|
||||
jonie |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 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 -------------------- Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет... |
|||
|
||||
Rififi |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1254 Регистрация: 9.3.2008 Репутация: 11 Всего: 36 |
UnrealMan,
нет поиска по предикату А зачем? stl-way (: Как отличать комментарии от данных, не являющихся комментариями? очень просто: если символ комментария находится внутри строкового литерала - то он считается частью данных. иначе - комментарий. |
|||
|
||||
UnrealMan |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 722 Регистрация: 30.3.2006 Репутация: 27 Всего: 32 |
Ini-файл - это по сути хранилище ассоциативного массива ассоциативных массивов. По названию секции находим секцию, по названию ключа находим значение. Покажи, где std::map реализует поиск по предикату. Ах, тут ещё строковые литералы надо вводить. А вслед за этим escape sequences, universal character names и директивы препроцессора C? ![]() |
|||
|
||||
jonie |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5613 Регистрация: 21.8.2005 Где: Владимир Репутация: 15 Всего: 118 |
ini файл хорош тем, в отличие, например от xml что не требует специальных знаний вроде перечня символов подлежащих экранированию, DTD схем, XSD схем и т.д.
-------------------- Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет... |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |