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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 19.06.2012, 10:33   #1  
Cardagant is offline
Cardagant
Участник
 
317 / 54 (2) ++++
Регистрация: 11.10.2011
Проверка на пустоту строки в макросе
Здравствуйте! Проверяю пустую строковую переменную на наличие в ней знаения в макросе, а он выдаёт, что она не пуста. Передаю пустую строку как параметр явно, выдаёт, что параметр - пустая строка. Подскажите, что неверно делаю? Спасибо!

X++:
str     s = '';
    ;
    #localmacro.McRoss

    #define.string(%1)

        #ifnot.string('')
            info("Не пустая");
        #endif

        #if.string('')
            info("Пустая");
        #endif

    #endmacro

    #McRoss('')  // Возвращает "пустая"
    #McRoss(s) // Возвращает "Не пустая"
Старый 19.06.2012, 10:40   #2  
Weez is offline
Weez
Участник
Axapta Retail User
 
250 / 84 (3) ++++
Регистрация: 18.01.2006
Адрес: Moscow city
почему бы не сделать проверку в таком виде?
str s = '';
;
#localmacro.McRoss

#define.string(%1)

if(#string != "")
info("Не пустая");
#endif

if(#string == "")
info("Пустая");
#endif

#endmacro

#McRoss('') // Возвращает "пустая"
#McRoss(s) // Возвращает "пустая"
__________________
Существует 10 типов людей: одни понимают двоичную систему, другие - нет.
За это сообщение автора поблагодарили: S.Kuskov (1).
Старый 19.06.2012, 10:53   #3  
ice is offline
ice
Участник
Аватар для ice
Лучший по профессии 2014
 
1,731 / 406 (17) +++++++
Регистрация: 23.03.2006
2Cardagant: макрос #ifnot и #if не проверяют значение переменной, они проверяют переданный параметр на этапе компиляции
Старый 19.06.2012, 10:56   #4  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,438 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Цитата:
Сообщение от Cardagant Посмотреть сообщение
что неверно делаю?
Макрос - это просто текстовая подстановка уровня компиляции.
Макрос работает с текстом программы(!) а не со значениями переменных.
Макрос не преобразует имя переменной в значение.

Если вы объявили макрос через имя переменной, то значением макроса будет буквально имя переменной, а не её значение.
X++:
    int NameOfVariable = 777;
    ;
    
    #define.test1(NameOfVariable)
    #define.test2(777)
    
    #if.test1(NameOfVariable)
        info("Test1: NameOfVariable");
    #endif
    
    #if.test1(777)
        info("Test1: 777");
    #endif

    #if.test2(NameOfVariable)
        info("Test2: NameOfVariable");
    #endif
    
    #if.test2(777)
        info("Test2: 777");
    #endif
За это сообщение автора поблагодарили: Cardagant (1).
Старый 19.06.2012, 10:58   #5  
Cardagant is offline
Cardagant
Участник
 
317 / 54 (2) ++++
Регистрация: 11.10.2011
Цитата:
Сообщение от ice Посмотреть сообщение
2Cardagant: макрос #ifnot и #if не проверяют значение переменной, они проверяют переданный параметр на этапе компиляции
2Ice Мне казалось переданный параметр проверяют конструкции типа #ifnot.empty(%1) или #if.empty(%1). Или я Вас неверно понял?
Старый 19.06.2012, 11:12   #6  
ice is offline
ice
Участник
Аватар для ice
Лучший по профессии 2014
 
1,731 / 406 (17) +++++++
Регистрация: 23.03.2006
Цитата:
Сообщение от Cardagant Посмотреть сообщение
2Ice Мне казалось переданный параметр проверяют конструкции типа #ifnot.empty(%1) или #if.empty(%1). Или я Вас неверно понял?
#ifnot.empty(%1) или #if.empty(%1) - это проверки на передан параметр или нет

Последний раз редактировалось ice; 19.06.2012 в 11:21.
Старый 19.06.2012, 11:37   #7  
Cardagant is offline
Cardagant
Участник
 
317 / 54 (2) ++++
Регистрация: 11.10.2011
Спасибо всем за советы!
Теги
макрос

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Ax12. Проверка строки на русские буквы. Sada DAX: Программирование 18 12.05.2014 18:09
Сортировка после изменения номера строки alicedr DAX: Программирование 4 11.11.2012 00:29
Цветные строки в Grid Sergo DAX: База знаний и проекты 14 19.04.2012 10:02
Проверка цикличности в спецификации vey DAX: Функционал 2 24.03.2005 11:03
При создании строки в закупке статус строки становится "Отменено" AlexUnik DAX: Функционал 4 27.09.2004 16:05

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

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

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