![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Char в D2010
Cobalt © (2012-02-29 10:14:00)
num := Elem.Code;
LastChar := num[Length(num)];
// меняем кириллицу на латиницу
if CharInSetEx(LastChar, ['а'..'я']) then
begin
num[Length(num)] :=Char(Ord('a') + Ord(LastChar) - Ord('а'));/CODE>
получаю:
Код заменён: 1.1-1-498б 1.1-1-498β
Принудительно привел к Char
num := Elem.Code;
LastChar := num[Length(num)];
// меняем кириллицу на латиницу
if CharInSetEx(LastChar, ['а'..'я']) then
begin
num[Length(num)] :=Char(Ord(Char('a')) + Ord(LastChar) - Ord(Char('а')));
Получил как хотел:
Код заменён: 1.1-1-498б 1.1-1-498b
Это отчего так?
Anatoly Podgoretsky (2012-02-29 11:42:00) [1]
> Cobalt © (29.02.12 10:16) [1]
> собственно вопрос - текстовые литералы в коде считаются
> не-Юникодовые по умолчанию? (если в строке нет изначально
> юникодовых символов)
>
> Умолчание - ansistring для строковых констант - это как-
> то неочевидно...
Все очевидно, в зависимости от того, что слева, то и будет
Этоже литерал, а не типизированая константа.
Cobalt (2012-02-29 11:41:00) [2]собственно, я хотел заменить
а (кирлил) на a latin
б (кирлил) на b latin
а в коде
Ord(LastChar) - Ord('а')
оказывается, 'а' (строковая константа) - Ansichar, а LastChar-то - Char
вот и не получалось...
... (2012-02-29 11:22:00) [3]> string and char.
>string and ansi char
читать как
integer and char.
integer and ansi char
... (2012-02-29 11:20:00) [4]А если в a('a') указать латинскую 'a' то incompatble type: string and char.
Т.е. лучше не передавать литералы в функцию просто так.
... (2012-02-29 11:17:00) [5]> [2] ... (29.02.12 10:52)
> 1.1-1-498б 1.1-1-498?
Я не заметил, что «б» изменился...
Похоже, все дело в том, что литерал передается в функцию.
IntToStr(sizeof('a')) = 2.
Но:
procedure a(b: integer);
begin
Form1.Caption := IntToStr(b);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
a('а');
end;
Ошибка: incompatble type: string and ansi char:)
... (2012-02-29 10:52:00) [6]А что такое CharInSetEx? Как объявлен второй аргумент? Как set of char? Если да, то смотрите варнинг компилятора.
Cobalt (2012-02-29 10:16:00) [7]собственно вопрос - текстовые литералы в коде считаются не-Юникодовые по умолчанию? (если в строке нет изначально юникодовых символов)
Умолчание - ansistring для строковых констант - это как-то неочевидно...