Форум: "Начинающим";
Текущий архив: 2013.03.22;
Скачать: [xml.tar.bz2];
Вниз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β
Принудительно привел к Charnum := 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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.139 c