Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

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 для строковых констант - это как-то неочевидно...


Наверх

Титульная страница Поиск, карта сайта Написать письмо