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

Поиск:

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


Эксперт
***


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

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



Надоело, что виндовые функции семейства *PrivateProfile* каждый раз открывают и читают файл. К тому же функционал очень сомнительный. Написал свою кроссплатформенную версию парсера ini файлов. В инете видел один примерчик, написанный на boost.spirit, но он меня не впечатлил, болше ничего хорошего не находил. Мой парсер использует объектную модель документа (DOM) и способен загружать файл как целиком, так и по частям (равно как и записывать). Это мой первый опыт написания открытого кода, так что необессудте. Сообщайте о любых багах и недочётах в ЛС по e-mail или на jabber, можно и в эту тему.


P.S. Тему можно удалить, исходники убрал

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


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


depict1
****


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

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



Цитата(Cheloveck @  23.6.2009,  21:41 Найти цитируемый пост)
 Сообщайте о любых багах и недочётах... можно и в эту тему.

мне в операторе присваивания не понятно несколько моментов:
1) почему возвращается константная ссылка?
2) будет ли ваш код работать правильно, если я отключу assert с помощью #define NDEBUG

Код

const section & section::operator=( const section & rhs )
{
    if( this == &rhs )
        return *this;

    delete records_;
    assert( records_ = new std::vector<record>( *rhs.records_ ) ); // ???
    name_ = rhs.name_;
    return *this;
}




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


Эксперт
***


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

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



Цитата(zim22 @  23.6.2009,  23:05 Найти цитируемый пост)
1) почему возвращается константная ссылка?

да, интересно, почему?)) Исправлю.

Цитата(zim22 @  23.6.2009,  23:05 Найти цитируемый пост)
2) будет ли ваш код работать правильно, если я отключу assert с помощью #define NDEBUG

ну, почему бы он и не будет работать? assert - это макрос, и его отключение ни на что не повлияет.


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


depict1
****


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

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



Цитата(Cheloveck @  23.6.2009,  22:11 Найти цитируемый пост)
ну, почему бы он и не будет работать? assert - это макрос, и его отключение ни на что не повлияет

повлияет. если логика кода находилась внутри этого макроса. код будет выглядеть так:
Код

const section & section::operator=( const section & rhs )
{
    if( this == &rhs )
        return *this;

    delete records_;
    //assert( records_ = new std::vector<record>( *rhs.records_ ) ); 
    name_ = rhs.name_;
    return *this;
}



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


Эксперт
***


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

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



zim22, спасибо, поправлю. Да, действительно, что-то такое было у майерса

Добавлено через 5 минут и 20 секунд
Поправил


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


Эксперт
****


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

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



Цитата(Cheloveck @  23.6.2009,  21:41 Найти цитируемый пост)
 В инете видел один примерчик, написанный на boost.spirit, но он меня не впечатлил, болше ничего хорошего не находил.

а зря, если нужно что-то распарсить, то лучше использовать spirit smile 
PM MAIL Skype GTalk   Вверх
Cheloveck
Дата 23.6.2009, 22:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Lazin, не впечатлил не spirit, а примерчик.


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


Вселенский отказник
****


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

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



Цитата

а зря, если нужно что-то распарсить, то лучше использовать spirit 
 На него выливали кучу вонючего коричневого по отношению к flex/bison из-за compile-time всего.


--------------------
Сообщество художников Artsociety.ru
PM MAIL WWW   Вверх
azesmcar
Дата 23.6.2009, 22:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 81
Всего: 211



Cheloveck

Меня больше всего вот этот момент забеспокоил
Код

const std::string iniparser::loadRecord( const std::string & filename,
                const std::string & section_name,
                const std::string & key )
{
    std::ifstream input( filename.c_str() );
    if( !input.is_open() )
        return NULL;
...

return NULL;
как это работает. Вызывается конструктор принимающий const char*.
Каким образом будете проверять что функция сработала нормально? Ни одного удовлетворяющего стандарту метода я не вижу.
Да и вообще, скорее всего еще при возврате значения вылетит.

Это сообщение отредактировал(а) azesmcar - 23.6.2009, 22:43
PM   Вверх
Cheloveck
Дата 23.6.2009, 22:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



azesmcar, мне представляется, что создастся объект std::string, метод empty() которого вернёт true, но если ты точно знаешь, что будет бяка, то я переделаю на return "";


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


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 81
Всего: 211



Цитата(Cheloveck @  23.6.2009,  22:42 Найти цитируемый пост)
azesmcar, мне представляется, что создастся объект std::string, метод empty() которого вернёт true

 smile вылетет при первой же возможности smile 

Цитата(Cheloveck @  23.6.2009,  22:42 Найти цитируемый пост)
то я переделаю на return ""; 

Я бы использовал исключения, возвращать "" как-то некрасиво.

Добавлено через 4 минуты и 5 секунд
Цитата

basic_string(const charT* s, const Allocator& a = Allocator());
9 Requires: s shall not be a null pointer.
10 Effects: Constructs an object of class basic_string and determines its initial string value from the
array of charT of length traits::length(s) whose first element is designated by s, as indicated
in Table 41:

PM   Вверх
Cheloveck
Дата 23.6.2009, 22:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



azesmcar, я уже протестил. Исправил на return ""; Исключения тут не нужны ИМХО, строка пустая, если не найдена и всё, кажется логично.


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


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 81
Всего: 211



Цитата(Cheloveck @  23.6.2009,  22:52 Найти цитируемый пост)
Исключения тут не нужны ИМХО, строка пустая, если не найдена и всё, кажется логично. 

Строка пустая если
1. Невозможно открыть файл
2. файл открыт, но в 
Код

if( first == key )
{
    input.close();
    return second;
}

ни разу не зашел. А если там в самом деле пустая строка?
Исключениями красиво, но не мне решать конечно smile я только идею предлагаю.


Это сообщение отредактировал(а) azesmcar - 23.6.2009, 22:56
PM   Вверх
Cheloveck
Дата 23.6.2009, 22:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



azesmcar, хорошо, я подумаю


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


Эксперт
****


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

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



Цитата(nerezus @  23.6.2009,  22:36 Найти цитируемый пост)
На него выливали кучу вонючего коричневого по отношению к flex/bison из-за compile-time всего.

если честно, не понимаю что в этом плохого, лично я использую spirit даже для разбора параметров командной строки, использовать flex/bison ради этого я бы не стал smile 
PM MAIL Skype GTalk   Вверх
jonie
Дата 24.6.2009, 07:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



а где Unicode?! Нафига нам нужны устаревшие однобайтовые кодировки?)


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


Эксперт
***


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

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



Цитата(jonie @  24.6.2009,  08:21 Найти цитируемый пост)
а где Unicode?! Нафига нам нужны устаревшие однобайтовые кодировки?) 

где ты видел ini файлы в юникоде? в юниксе? так там всё и с char'ом всегда работает.


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


depict1
****


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

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



Цитата(Cheloveck @  24.6.2009,  15:32 Найти цитируемый пост)
где ты видел ini файлы в юникоде? 

поищите в гугле. они есть. "ini file unicode"


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


Вселенский отказник
****


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

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



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

jonie, с другой стороны utf-8 позволят обходиться без этого и код такой с ним нормально работает.


--------------------
Сообщество художников Artsociety.ru
PM MAIL WWW   Вверх
Cheloveck
Дата 24.6.2009, 16:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Была идея использовать std::basic_string вместо std::string и прикрутить шаблоны.... Но я отмёл эту идею как излишнее... юникода не будет!!! Если код действительно заинтересовал, не так уж и сложно изменить его, всё в Ваших руках))


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


depict1
****


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

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



Цитата(Cheloveck @  24.6.2009,  16:54 Найти цитируемый пост)
Была идея использовать std::basic_string вместо std::string 

это одно и тоже
 
Код

typedef basic_string<char, char_traits<char>, allocator<char> > string;

 



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


Эксперт
***


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

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



Цитата(zim22 @  24.6.2009,  18:43 Найти цитируемый пост)
это одно и тоже

Код

typedef basic_string<wchar_t, char_traits<wchar_t>, allocator<wchar_t> > wstring;



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


depict1
****


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

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



Cheloveck, и что? 
вы хоть бы объяснили, зачем его привели...
Код

for (int i = 0; i < n; i++)

smile

Это сообщение отредактировал(а) zim22 - 24.6.2009, 18:49


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


Эксперт
***


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

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



Цитата(zim22 @  24.6.2009,  19:47 Найти цитируемый пост)
вы хоть бы объяснили, зачем его привели...

Ну, чтоб показать, что basic_string и string не совсем одно и то же. И то, что если в шаблоне передать wchar_t, то получим юникод.



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


depict1
****


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

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



 smile 
Цитата(Cheloveck @  24.6.2009,  18:52 Найти цитируемый пост)
Ну, чтоб показать, что basic_string и string не совсем одно и то же.

под "одним и тоже" я подразумевал, что string является всего-лишь typedef для basic_string<char>. эх, не умеете вы мысли читать... smile


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


Эксперт
***


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

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



Цитата(zim22 @  24.6.2009,  19:59 Найти цитируемый пост)
эх, не умеете вы мысли читать...

да, с этим плоховато))


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


Эксперт
***


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

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



Cheloveck
где ты видел ini файлы в юникоде? 
а почему не?
var = ∰ఋ୬൬乙㊉
даже если они не в юникоде, но сама программа очень даже может быть в нём
и что мне теперь, каждый раз перекодировать всё пришедшее из конфига?
да ну нафик такое щастие.
PM MAIL   Вверх
Cheloveck
Дата 24.6.2009, 20:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Rififi, ничего сложного в перекодировании не вижу, тем блее, что в UNIX системах это будет балластом. Считаю дискуссию по отсутствию юникода не уместной, так как уже ответил, юникода - не будет!!!


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


Эксперт
***


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

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



Код

#include <windows.h>

int main () 
{
    wchar_t str[128];
    ::GetPrivateProfileStringW( L"test", L"key", NULL, str, 128, L"C:\\test.ini" );
    ::MessageBoxW( NULL, str, NULL, 0 );
    return 0;


Содержимое C:\test.ini кодируеи в UTF-8 или в UTF-8 без BOM
Код

[test]
key=русский текст


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

Из эксперимента видим, что виндовые функции чхали на юникод в файлах. Если файл будет в ANSI - всё работает, из чего следует, что функции каждый раз перекодируют, что пришло из конфига. Просто это скрыто. Написать маленькую функцию-декодер самому очень легко. Не думаю, что это должно быть в парсере.

Это сообщение отредактировал(а) Cheloveck - 24.6.2009, 21:46


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


Эксперт
***


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

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



Cheloveck
... Смотрим на месаджбокс и удивляемся, как это мы раньше жили. ...
а потом читаем насчёт поддержки юникода в Windows и офигиваем от того, что поддерживается только UCS-2, безо всяких там UTF-8
вот оно как, однако.
PM MAIL   Вверх
Cheloveck
Дата 24.6.2009, 22:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Rififi, иии? от этого работа с UTF-8 файлами не стала другой. 


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


Эксперт
***


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

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



а к чему тогда была написана эта кривизна (я про последний пример)?
ты пытаешься засунуть в ucs-2 функцию строку в кодировке utf-8 и радуешься что ничего не получается.

Это сообщение отредактировал(а) Rififi - 24.6.2009, 23:31
PM MAIL   Вверх
Cheloveck
Дата 24.6.2009, 23:46 (ссылка)  | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Rififi, к тому, что не предполагаются INI файлы в UTF-8. А потдерживать UTF-16/UCS-2 или UTF-32 я не собираюсь вовсе. Пусть сначала Microsoft разбирётся, какую кодировку они хотят использовать. Или же пусть делают как в UNIX, когда есть системная кодировка и все программы корректно с ней работают, используя char.


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


Эксперт
****


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

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



а что, ini файлы только в винде бывают? И только в 1 байтовой и ucs-2 кодировке ?)) хреновый дизайн библиотеки - вот ответ.
Цитата
Или же пусть делают как в UNIX, когда есть системная кодировка и все программы корректно с ней работают, используя char.

расскажите ему кто-нибудь про юникод в никсах пжлст.

Это сообщение отредактировал(а) jonie - 24.6.2009, 23:53


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


Эксперт
***


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

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



Код

#include <iostream>
#include "iniparser.h"

using namespace iniparser;

int main()
{
    std::string str = loadRecord( "test.ini", "секция", "ключ" );
    std::cout << str << std::endl;
    return 0;
}

файл в UTF-8
Код

[секция]
ключ=значение

Код

sergey:/tmp/test$ make
g++ -c -g iniparser.cpp -o iniparser.o
g++ -c -g test.cpp -o test.o
g++ iniparser.o test.o /home/sergey/boost/lib/libboost_regex-gcc43-mt.a -g -o test
sergey:/tmp/test$ ./test
значение


О чём ещё говорить, я не знаю. В UNIX'е это работает без проблем. Не устраивает библиотека, не пользуйте. Гоаорить, что хреновая не надо. Она именно такая, как была задумана. Напишите лучше, слава Богу.

Цитата(jonie @  25.6.2009,  00:50 Найти цитируемый пост)
расскажите ему кто-нибудь про юникод в никсах пжлст.

Да, расскажите...



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


Эксперт
***


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

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



Cheloveck
... к тому, что не предполагаются INI файлы в UTF-8 ...
при чём здесь таки utf-8 я так и не понял, ну да ладно, не суть.
вот что странно - то ты недочётов хотел, то "напишите сами".
что касается первого - пожалуйста, получите: отсутствие поддержки юникода под windows в кроссплатформенной библиотеке для меня означает означает жирный минус (а точнее - крест) на этой библиотеке.

Пусть сначала Microsoft разбирётся, какую кодировку они хотят использовать
что удивительно, они таки разобрались. уже почти 20 лет как (когда там windows 3.0 вышла? ).
о как оно получается.
PM MAIL   Вверх
UnrealMan
Дата 25.6.2009, 00:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(zim22 @  23.6.2009,  22:05 Найти цитируемый пост)
мне в операторе присваивания не понятно несколько моментов:
1) почему возвращается константная ссылка?
2) будет ли ваш код работать правильно, если я отключу assert с помощью #define NDEBUG

3) является ли такая реализация exception safe?
PM MAIL   Вверх
Cheloveck
Дата 25.6.2009, 00:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Rififi, хорошо. Расскажи, что за юникод я должен поддерживать? По моему неведению, я всегда считал UTF-8 юникодом. Покажи как надо читать файлы в "настоящем" юникоде.

Добавлено через 3 минуты и 12 секунд
Цитата(UnrealMan @  25.6.2009,  01:29 Найти цитируемый пост)
3) является ли такая реализация exception safe? 

В плане? Ссылку я уже убрал. Эксцепшен возникнет только от new, но это должно пользовотельское приложение обработать. Поконкретнее, пожалуйста.


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


Шустрый
*


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

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



Cheloveck, Мдя...печально вышло smile 
PM MAIL   Вверх
Lazin
Дата 25.6.2009, 06:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(Cheloveck @  25.6.2009,  00:30 Найти цитируемый пост)
я всегда считал UTF-8 юникодом

UTF-* это не юникод, это кодировки, юникод это стандарт smile 

Цитата(Cheloveck @  25.6.2009,  00:04 Найти цитируемый пост)
Да, расскажите...

что-бы использовать твой код в linux, нужно сначала создать локаль ru_RU.cp1251 командой locale-gen
PM MAIL Skype GTalk   Вверх
Andrew121
Дата 25.6.2009, 07:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(Rififi @  25.6.2009,  00:25 Найти цитируемый пост)
то ты недочётов хотел, то "напишите сами"

Да это перебор. При том оч...оч большой!

Да и при чем тут юникод?!
Вот реально, отпишитесь те, кому жизнено необходим юникод в ини файле. И сам ини файлик приложите. Пожалуйста. И мы, все дружно, подсчитаем. smile 


Ок?
Начинаем.
PM MAIL   Вверх
jonie
Дата 25.6.2009, 07:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Andrew121 самый употребимый язык на планете - китайский (да, да, не английский). вот и думай. Не поддерживать юникод в своих программах - абсолютно неверно и не дальновидно.




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


Шустрый
*


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

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



jonie, Ваше замечание принял.
А что же с моим предложением? Пожалуйста без намеков и двусмысленности.
PM MAIL   Вверх
Andrew121
Дата 25.6.2009, 07:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Cheloveck, Дружище, пощитай сколько из них сказали тебе спасибо. И делай выводы............
PM MAIL   Вверх
Lazin
Дата 25.6.2009, 08:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(Andrew121 @  25.6.2009,  07:07 Найти цитируемый пост)
Да и при чем тут юникод?!
Вот реально, отпишитесь те, кому жизнено необходим юникод в ини файле. И сам ини файлик приложите. Пожалуйста. И мы, все дружно, подсчитаем.

отписываюсь, допустим, в ini файле хранится строчка
Цитата

path = %path to some file%
а путь к файлу может быть юникодным smile

Добавлено через 2 минуты и 32 секунды
даже больше, рассчитывать на то, что путь к файлу будет состоять только символов, чей код <128 (латинские символы, числа итд) - наивно smile 
PM MAIL Skype GTalk   Вверх
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.1943 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


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

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