-
DimaBr © (30.05.12 15:55) [20]Понятно, я наблюдал на RAD 2009 кривую работу стандартной функции Val, тоже удивлялся
http://www.sql.ru/forum/actualthread.aspx?bid=20&tid=931379 -
Rouse_ © (30.05.12 16:55) [21]
> DimaBr © (30.05.12 15:55) [20]
>
> Понятно, я наблюдал на RAD 2009 кривую работу стандартной
> функции Val, тоже удивлялся
Ну у них периодически косяки всплывают.
В 2010-ой например, сейчас не работает CharInSet с русскими буквами, как пример:var
С: Char;
begin
С := 'я';
if not CharInSet(С, ['а'..'я']) then
ShowMessage('FAILED!!!');
ибо реализация у него:
function CharInSet(C: WideChar; const CharSet: TSysCharSet): Boolean;
begin
Result := (C < #$0100) and (AnsiChar(C) in CharSet);
end;
передаваемая буква "я" равна #$44F и фэйл происходит на первом сравнении,
а второе сравнение фейлит на приведении к AnsiChar-у, возвращая вместо ансишной "я" (с кодом 255) ансишное "O" (с кодом 79) -
Cobalt © (01.06.12 13:11) [22]Ну, это методологический косяк.
Странно то, что они не отметили эту функцию как obsolete, для ясности. -
Rouse_ © (01.06.12 14:19) [23]
> Cobalt © (01.06.12 13:11) [22]
>
> Ну, это методологический косяк.
> Странно то, что они не отметили эту функцию как obsolete,
> для ясности.
Что за методологический? Ты иногда так выражаешся, что я категорически не понимаю об чем спичь :)
Что за метода и почему они должны отметить данную функцию как obsolete с учетом того что она только в 2010-ой дельфе была введена, как замена старомуif C in [setdata] then.
Об чем собственно компилер при сборке и предупреждает:[DCC Warning] Project1.dpr(63): W1050 WideChar reduced to byte char in set expressions. Consider using 'CharInSet' function in 'SysUtils' unit.
Получается, что они должны были выпустить уже устаревшую, на момент ее появления, функцию? :)))) -
Cobalt © (01.06.12 15:01) [24]не шибко мудро сравнивать 2байт-символ с 1байт-символ
-
Rouse_ © (02.06.12 10:50) [25]
> Cobalt © (01.06.12 15:01) [24]
> не шибко мудро сравнивать 2байт-символ с 1байт-символ
Советую это объяснить напрямую разработчикам данной функции :) -
Cobalt © (02.06.12 22:35) [26]И вдобавок разработчикам-пользователям этой функции :)
-
Rouse_ © (02.06.12 23:22) [27]Вовч, опять не понял...
Грамотные пользователи воспользуются оператором case, ну или на крайняк перепишут столь поразившее тебя двухбайтовое сравнение через приведение на AnsiString[Char]