crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

2 страниц V   1 2 >  
Ответить в данную темуНачать новую тему
> QSettings. Escape-последовательности в ini файлах
Klabush
  опции профиля:
сообщение 14.1.2008, 13:38
Сообщение #1


Новичок


Группа: Новичок
Сообщений: 8
Регистрация: 10.10.2007
Пользователь №: 7

Спасибо сказали: 0 раз(а)




Репутация:   0  


Обычно из инишки данные читаются как-то так:

QSettings Settings("Program.ini", QSettings::IniFormat);
Settings.beginGroup("Common");
QString Path = Settings.value("Path", "").toString();


Но если значение какого-либо ключа в ini файле будет содержать бэкслеш (\), то он воспримется как escape-последовательность.

То есть если у нас в инишке

[Common]
Path=c:\test\77.txt


то в программе мы получим значение Path

c:<символ табуляции>estM.txt


Как эту "фичу" обойти?
Хотелось бы получить строку как она есть.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
archimed7592
  опции профиля:
сообщение 14.1.2008, 13:45
Сообщение #2


Участник
**

Группа: Участник
Сообщений: 127
Регистрация: 27.12.2007
Из: Moscow
Пользователь №: 56

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата(Klabush @ 14.1.2008, 13:38) *
Как эту "фичу" обойти?
Хотелось бы получить строку как она есть.

1. Писать в ini Path=c:\\test\\77.txt
2. Парсить ini руками.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Klabush
  опции профиля:
сообщение 14.1.2008, 14:01
Сообщение #3


Новичок


Группа: Новичок
Сообщений: 8
Регистрация: 10.10.2007
Пользователь №: 7

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата(archimed7592 @ 14.1.2008, 13:45) *
1. Писать в ini Path=c:\\test\\77.txt


Очень умно, ага. ;)
И, главное, удобно и понятно будет использовать такую программу (особенно "не посвящённым" в волшебное таинство С++). :angry:

Сообщение отредактировал Klabush - 14.1.2008, 14:03
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
archimed7592
  опции профиля:
сообщение 14.1.2008, 14:14
Сообщение #4


Участник
**

Группа: Участник
Сообщений: 127
Регистрация: 27.12.2007
Из: Moscow
Пользователь №: 56

Спасибо сказали: 0 раз(а)




Репутация:   0  


Ну, не посвящённым в таинства С++ админам не составляет труда писать reg файлы(реестр), а так дело твоё - можешь выбрать ручной парсинг. Кстати, в случае xml-настроек тоже нужно "экранировать" некоторые символы. Да и вообще, ini устарел :).
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ViGOur
  опции профиля:
сообщение 14.1.2008, 14:18
Сообщение #5


Мастер
******

Группа: Модератор
Сообщений: 3296
Регистрация: 9.10.2007
Из: Москва
Пользователь №: 4

Спасибо сказали: 231 раз(а)




Репутация:   40  


Цитата(archimed7592 @ 14.1.2008, 14:14) *
Ну, не посвящённым в таинства С++ админам не составляет труда писать reg файлы(реестр),
Угу, особенно под *nix! :)
Неее, походу должно быть другое решение, просто как вариант можно использовать обратные слэши:
Цитата
[Common]
Path=c:/test/77.txt
Но те кто не посвящен в таинства могут по привычке вбить и обычные виндовые, а потом будут гадать или программера доставать: "почему не работает!". :)

Сообщение отредактировал ViGOur - 14.1.2008, 14:19
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kuler
  опции профиля:
сообщение 10.11.2008, 11:24
Сообщение #6


Танцор диско
***

Группа: Участник
Сообщений: 441
Регистрация: 11.9.2008
Из: Москва
Пользователь №: 289

Спасибо сказали: 6 раз(а)




Репутация:   -1  


а у меня проблема наоборот, нужно сохранить ключ abc/def, а он делает ветку abc а в ней ключ def. Символ подавления \ не срабатывает
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 10.11.2008, 14:06
Сообщение #7


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


kuler, код приведи, как ты это делаешь
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kuler
  опции профиля:
сообщение 10.11.2008, 14:15
Сообщение #8


Танцор диско
***

Группа: Участник
Сообщений: 441
Регистрация: 11.9.2008
Из: Москва
Пользователь №: 289

Спасибо сказали: 6 раз(а)




Репутация:   -1  


QSettings settings("Unit", "Subunit");
settings.setValue("af\/vb", "xxx");
хотел бы чтоб был ключ af/vb со значением xxx
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 10.11.2008, 14:39
Сообщение #9


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


судя по примерам в описании класса QSettings, это возможно.
Ты какой формат используешь и на какой системе?

ага, я кажется понял. слэш всяко будет суб ключи создавать, но ты можешь и обращатся в той же манере к ним как и записывал:
 QSettings settings;
settings.setValue("animal/snake", 58);
settings.value("animal/snake", 1024).toInt();   // returns 58
settings.value("animal/zebra", 1024).toInt();   // returns 1024
settings.value("animal/zebra").toInt();         // returns 0
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
AD
  опции профиля:
сообщение 10.11.2008, 14:55
Сообщение #10


Профессионал
*****

Группа: Участник
Сообщений: 2003
Регистрация: 4.2.2008
Из: S-Petersburg
Пользователь №: 84

Спасибо сказали: 70 раз(а)




Репутация:   17  


Цитата(Litkevich Yuriy @ 10.11.2008, 14:39) *
 settings.value("animal/snake", 1024).toInt();   // returns 58
settings.value("animal/zebra", 1024).toInt();   // returns 1024
settings.value("animal/zebra").toInt();         // returns 0

Юра, поясни, пожалуйста, пример. То ли опечатка в примере, то ли я что-то не так понимаю?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

2 страниц V   1 2 >
Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


5 чел. читают эту тему (гостей: 5, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 23.11.2024, 7:21