Показать сообщение отдельно
Старый 26.04.2023, 14:01   #468  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,427 / 1771 (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).