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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Поиск параметров по имени  (Прочитано 3141 раз)
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« : Сентябрь 30, 2015, 09:23 »

Добрый день

Есть дерево параметров и др объект ссылается/использует параметры-листья по имени (xранит строку имен). Не мудрствуя лукаво сделал путь разделенный слешами
Цитировать
Object 1/Attributes/Irradiance/Color
Работает, но во-первых, вбивать/иметь длинный путь неудобно, особенно учитывая что хранимых имен может быть несколько (пусть и немного). Тогда придется так
Цитировать
Object 1/Attributes/Irradiance/Color  Object 2/Surface/Diffuse/Color ...
Размазывать это в стиле MSVC не хочется, а иначе (в 1 строке) редактировать трудновато

Во-вторых, неуникальность имен может работать в плюс. Примеры
Цитировать
Color   // все листья с именем Color
Diffuse/Color   //  все листья чье полное имя кончается на Diffuse/Color   
Object 1/../Color  // все листья чье полное имя начинается на Object 1 и кончается на Color   
и.т.д
Теперь имея полное имя листа надо проверить удовлетворяет ли он коротким именам (примеры выше). Как лучше всего это сделать?

Спасибо
Записан
Racheengel
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2679


Я работал с дискетам 5.25 :(


Просмотр профиля
« Ответ #1 : Октябрь 02, 2015, 23:46 »

Ну просто color написать это не очевидно,  лучше бы */color, и аналогично object1/*/color.

Тогда можно просто определить индекс *, и если она найдена, разбть на 2 подстроки и матчить через startWith и endsWith.
Ну, или рыгэкспами богомерзкими Улыбающийся
Записан

What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.

COVID не волк, в лес не уйдёт
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #2 : Октябрь 03, 2015, 07:59 »

Ну просто color написать это не очевидно,  лучше бы */color, и аналогично object1/*/color.
Ну это как минимум придется объяснять в документации. Думаю наоборот, может лучше даже .. (многоточие) убрать. Просто object 1/color. (заметим что пробелы в именах допустимы). Тогда получается довольно четко

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

Тогда можно просто определить индекс *, и если она найдена, разбть на 2 подстроки и матчить через startWith и endsWith.
Ну, или рыгэкспами богомерзкими Улыбающийся
Каким образом?
Записан
Racheengel
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2679


Я работал с дискетам 5.25 :(


Просмотр профиля
« Ответ #3 : Октябрь 03, 2015, 11:52 »

Ну тогда у нас всего 2 варианта.
Сначала в любом случае ищем .. в имени. Если не нашли, матчим через endsWith ("Color").
Если нашли, режем короткое имя на 2 части, начало и конец, т.е. на Object 1 и Color. И матчим через startsWith("Object 1") и через endsWith ("Color").
Записан

What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.

COVID не волк, в лес не уйдёт
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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