Russian Qt Forum

Программирование => С/C++ => Тема начата: Igors от Сентябрь 30, 2015, 09:23



Название: Поиск параметров по имени
Отправлено: Igors от Сентябрь 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   
и.т.д
Теперь имея полное имя листа надо проверить удовлетворяет ли он коротким именам (примеры выше). Как лучше всего это сделать?

Спасибо


Название: Re: Поиск параметров по имени
Отправлено: Racheengel от Октябрь 02, 2015, 23:46
Ну просто color написать это не очевидно,  лучше бы */color, и аналогично object1/*/color.

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


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

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

Тогда можно просто определить индекс *, и если она найдена, разбть на 2 подстроки и матчить через startWith и endsWith.
Ну, или рыгэкспами богомерзкими :)
Каким образом?


Название: Re: Поиск параметров по имени
Отправлено: Racheengel от Октябрь 03, 2015, 11:52
Ну тогда у нас всего 2 варианта.
Сначала в любом случае ищем .. в имени. Если не нашли, матчим через endsWith ("Color").
Если нашли, режем короткое имя на 2 части, начало и конец, т.е. на Object 1 и Color. И матчим через startsWith("Object 1") и через endsWith ("Color").