AXForum  
Вернуться   AXForum > Прочие обсуждения > Курилка
DAX
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 26.04.2023, 14:01   #1  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,429 / 1772 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
В классе Global метод con2Str
В стандарте, если в контейнере значения первых позиций будут пустыми строками, то метод их проигнорирует и не добавит после них разделитель. Из-за этого количество элементов в контейнере и в результирующей строке будет разным. Может быть в этом и была какая-то логика, если бы это работало со всеми пустыми элементами. Но вот "пустые" значения идущие после первого "не пустого" элемента контейнера уже будут обрамлены разделителем. Я считаю что это явно ошибка и в строке должны быть представлены все элементы контейнера и пустые и не пустые.

Причина ошибки и собственно исправление:
X++:
static str 1000 con2Str(container c, str 10 sep = ',')
{
    int         idx = 0;
    int         len = conlen(c);
    str  100    tmp;
    str 1000    retStr;
;
    while (idx < len)
    {
        idx += 1;
// KSM fix empty string -->>
//        if (retStr)
        if (idx > 1)
// KSM fix empty string <<--
            retStr += sep;

        tmp = conpeek(c,idx);
        retStr += tmp;
    }
    return retStr;
}

Здесь интересен ещё один момент. Как значения типа anytype преобразуется в строку? По каким правилам происходит такое преобразование?
Например дата:
X++:
static void TestAnytype2StrConvert(Args _args)
{
    date t = today();
    anyType a = t;
    str 100 s = a;
    ;
    
    info(s);
}
За это сообщение автора поблагодарили: Logger (1).
Старый 27.04.2023, 20:36   #2  
dech is offline
dech
Участник
Аватар для dech
Самостоятельные клиенты AX
 
643 / 347 (13) ++++++
Регистрация: 25.06.2009
Адрес: Омск
Записей в блоге: 3
Цитата:
Сообщение от S.Kuskov Посмотреть сообщение
Здесь интересен ещё один момент. Как значения типа anytype преобразуется в строку? По каким правилам происходит такое преобразование?
Например дата:
X++:
static void TestAnytype2StrConvert(Args _args)
{
    date t = today();
    anyType a = t;
    str 100 s = a;
    ;
    
    info(s);
}
В AnyType также присутствует дополнительная информация о базовом типе. В зависимости от этого типа используется уже конкретное преобразование. В strFmt() также используется anytype в качестве аргументов (кроме первого, который должен быть строкой). strFmt корректно преобразует любой переданный аргумент в строку, будь то число, енум или дата.
__________________
// no comments
Теги
axapta, cil, d365fo, guid, rasset, uuid, uuidv7, баг

 


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

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

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 08:18.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.