AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск Все разделы прочитаны

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 21.05.2024, 13:14   #1  
Yury N is offline
Yury N
Участник
 
1 / 10 (1) +
Регистрация: 18.09.2022
Like и слэш
Здравствуйте!
Microsoft dynamics ax 2012.
Подскажите, почему like не срабатывает:
X++:
    str     s = "\\Projects\\Shared";
    ;
    
    if (s like "\\Projects\\*")
    {
        info("Ok");
    }
Старый 21.05.2024, 16:15   #2  
axm2017 is offline
axm2017
Участник
 
1,903 / 295 (13) ++++++
Регистрация: 15.05.2017
А что по вашему мнению like должен сделать и почему?
Это же вроде как из sql ?
А вы применяете его к строке.
Старый 21.05.2024, 18:01   #3  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,947 / 3230 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Если мне не изменяет память то надо слеши зачетверить, т.е. написать что-то типа
X++:
    str     s = "\\Projects\\Shared";
    ;
    
    if (s like "\\\\Projects\\\\*")
    {
        info("Ok");
    }
или так
X++:
    str     s = "\\Projects\\Shared";
    ;
    
    if (s like @"\\\\Projects\\\\*")
    {
        info("Ok");
    }
Старый 21.05.2024, 18:06   #4  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,947 / 3230 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Цитата:
Сообщение от axm2017 Посмотреть сообщение
Это же вроде как из sql ?
А вы применяете его к строке.
В X++ вполне допустимо применять like к строковым переменным. Работает. В простых случаях всегда так делаю. Меньше ошибок по сравнению с match или регулярками.
Старый 21.05.2024, 22:16   #5  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,698 / 1195 (43) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
По той причине, что обратный слеш в Axapta внутри текстовой константы - это управляющий символ, который показывает, что далее за ним следует некий управляющий символ

Например

"\t" - символ табуляции
"\n" - символ перевода строки
"\r" - символ возврата каретки

Чтобы вывести сам по себе обратный слеш как символ, надо его задвоить.

"\\" - первый слеш будет интерпретирован как управляющий, а второй, собственно, и отобразится

Альтернативный вариант, это использовать символ @ перед текстовой константой. Этот символ говорит о том, что следующий за ним текст надо воспринимать "как есть". Не анализировать на предмет наличия управляющих символов. В данном случае, вот так

@"\"

То, с чем сравниваешь в твоем примере

X++:
    info("\\Projects\\*");
    info("\\\\Projects\\\\*");
    info(@"\\Projects\\*");
__________________
- Может, я как-то неправильно живу?!
- Отчего же? Правильно. Только зря...
За это сообщение автора поблагодарили: sukhanchik (4).
Старый 22.05.2024, 10:11   #6  
Товарищ ♂uatr is offline
Товарищ ♂uatr
Участник
Аватар для Товарищ ♂uatr
MCBMSS
 
303 / 868 (29) +++++++
Регистрация: 23.10.2012
Добрый день.
Хочу поставить под сомнение оправданность использования оператора like в итоговых решениях. Для прототипирования или разовых операций - понятно, быстрая скорость разработки.
В долгосрочной перспективе - потенциальное место для проблем быстродействия, либо поддержки решения.
В случае с проектами можно же через TreeNode зайти и никаких констант:
X++:
SysTreeNode::getSharedProject().AOTfindChild(_projectName)

Последний раз редактировалось Товарищ ♂uatr; 22.05.2024 в 10:22.
Старый 22.05.2024, 10:12   #7  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,440 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Цитата:
Сообщение от Logger Посмотреть сообщение
Если мне не изменяет память то надо слеши зачетверить
если без собаки то получается завосьмерить
X++:
    str     s = "\\Projects\\Shared";
    ;
    
    if (s like "\\\\\\\\Projects\\\\\\\\*")
    {
        info("Ok");
    }
Старый 22.05.2024, 11:15   #8  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,947 / 3230 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Цитата:
Сообщение от Владимир Максимов Посмотреть сообщение
По той причине, что обратный слеш в Axapta внутри текстовой константы - это управляющий символ...
Это понятно.
Я 2 примера привел не потому что они эквивалентны, а потому что не помнил точно сколько слешей надо ставить - 4 или 8. Один из вариантов должен был подойти. Предоставил возможность проверить это автору темы. Нам же еще работать немного надо
Старый 22.05.2024, 14:27   #9  
Zabr is offline
Zabr
Участник
Axapta Retail User
 
1,202 / 345 (14) ++++++
Регистрация: 26.06.2002
Адрес: Москва
Обходной путь - в обеих строках заменить слеш на какой-то другой символ и сравнивать через like измененные строки. Чтобы обойтись без экранирования. Например на $ или #.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
stoneridgesoftware: X++ Select Statements That Look More Like SQL Blog bot DAX Blogs 2 28.08.2017 11:08
ax-erp: ‘Not Like’ in Dynamics AX Blog bot DAX Blogs 0 13.09.2012 21:11
Fred Shen: 'Not Like' in Dynamics AX Blog bot DAX Blogs 0 28.10.2006 16:40
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 19:00.