![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Проверка в множестве
avil © (2011-06-12 15:00:00)win7,d2010
Господа, объясните мне, убогому, ЧЯДНТ? Есть код:
function gets(c: char; n: integer; a: array of char): char;
var
l: integer;
begin
result := c;
if CharInSet(c,[a[0]..a[1]]) then
begin
{code}
end;
end;
Каждый символ текста прогоняется через эту функцию. Когда в функцию приходят c = ',' и a = ('А','Я') при проверке CharInSet возвращается TRUE. Пробовал менять на классический c in [], и заменял char`ы на ординальные аналоги, но все равно возвращается TRUE. Ординальное значение ',' = 44, 'A' = 192, 'Я' = 223. ПОЧЕМУ?
Loginov Dmitry (2011-06-12 18:32:00) [1]
> Действительно, проблема в юникоде, на время сделал ansichar.
В множество не должны попадать Unicode-символы. В этой части D2010 недоработана (в том, что не выдает соответствующий Warning, не прерывает компиляцию и самовольно отрезает и выбрасывает старший байт Unicode-символа). Обычно в квадратный скобках идет перечисление символьных констант, а не отдельных элементов массива.
В вашем случае необходимо объявитьa: array of AnsiChar.
avil (2011-06-12 16:45:00) [2]Действительно, проблема в юникоде, на время сделал ansichar. Спасибо за наводку.
MBo (2011-06-12 15:14:00) [3]В d2010 Char уже не тот...
Стоит почитать статьи по переходу на юникод