Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2013.03.22;
Скачать: CL | DM;

Вниз

Char в D2010   Найти похожие ветки 

 
Cobalt ©   (2012-02-29 10:14) [0]

             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

Это отчего так?


 
Cobalt ©   (2012-02-29 10:16) [1]

собственно вопрос - текстовые литералы в коде считаются не-Юникодовые по умолчанию? (если в строке нет изначально юникодовых символов)

Умолчание - ansistring для строковых констант - это как-то неочевидно...


 
...   (2012-02-29 10:52) [2]

А что такое CharInSetEx? Как объявлен второй аргумент? Как set of char? Если да, то смотрите варнинг компилятора.


 
...   (2012-02-29 11:17) [3]

> [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 11:20) [4]

А если в a("a") указать латинскую "a" — то incompatble type: string and char.
Т.е. лучше не передавать литералы в функцию просто так.


 
...   (2012-02-29 11:22) [5]

> string and char.
>string and ansi char

читать как
integer and char.
integer and ansi char


 
Cobalt ©   (2012-02-29 11:41) [6]

собственно, я хотел заменить
а (кирлил) на a latin
б (кирлил) на b latin

а в  коде
Ord(LastChar) - Ord("а")
оказывается, "а" (строковая константа) - Ansichar, а LastChar-то - Char

вот и не получалось...


 
Anatoly Podgoretsky ©   (2012-02-29 11:42) [7]


> Cobalt ©   (29.02.12 10:16) [1]
> собственно вопрос - текстовые литералы в коде считаются
> не-Юникодовые по умолчанию? (если в строке нет изначально
> юникодовых символов)
>
> Умолчание - ansistring для строковых констант - это как-
> то неочевидно...

Все очевидно, в зависимости от того, что слева, то и будет
Этоже литерал, а не типизированая константа.



Страницы: 1 вся ветка

Текущий архив: 2013.03.22;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.121 c
2-1340011274
начинающий_
2012-06-18 13:21
2013.03.22
битовые операции


3-1282715135
fast
2010-08-25 09:45
2013.03.22
Вызов хранимой процедуры из FastReport


2-1333239798
toropoff
2012-04-01 04:23
2013.03.22
чтение WMI


15-1351000566
QAZ5
2012-10-23 17:56
2013.03.22
Visual Studio <> совместимость?


15-1342500894
Peter_Evil
2012-07-17 08:54
2013.03.22
ошибку: CommandText does not return a result set