Как выделить символ из строки?

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Как выделить символ из строки?

Сообщение А.Н. » 04.04.2010 15:31:56

Как выделить из строки символ с определённым индексом?
Типа смешно, да?
Я как только не извращался, от такого: labelPTSSer.Caption[vn]
до такого:
Copy(Utf8Decode(labelPTSSer.Caption), vn, 1);
и ещё тупее.

Всё выделяет. За исключением русских букв. Ord(labelPTSSer.Caption[vn]) даёт какой-то непонятный код.
200 с чем-то, вроде. В ASCII - это символы рамки.
Пробовал UTF8Decode. Тоже самое. Всё работает, за исключением русских символов. :(
Причём, если просто работать с Caption, как со строкой, всё отображается нормально.

Что делать?
А.Н.
постоялец
 
Сообщения: 230
Зарегистрирован: 13.03.2010 12:23:58

Re: Как выделить символ из строки?

Сообщение Mr.Smart » 04.04.2010 15:48:00

Использовать функции для работы с кодировкой UTF-8 на пример:
Код: Выделить всё
uses LCLProc...
...
var
s: String;
...
begin
  s:=UTF8Copy(labelPTSSer.Caption,1,1);
end;
...

или раз вы уже решили использовать WideString:
Код: Выделить всё
var
  c: WideChar;
...
begin
  c:=Utf8Decode(labelPTSSer.Caption)[1];
end;
...


А.Н. писал(а):Типа смешно, да?

Не смешно. Не поняв кодирование UTF8 вы будете задавать кучу очевидных вопросов. И не мешало бы ещё пользоваться поиском по форуму.
Mr.Smart
долгожитель
 
Сообщения: 1796
Зарегистрирован: 29.03.2008 01:01:11
Откуда: из леса!

Re: Как выделить символ из строки?

Сообщение А.Н. » 04.04.2010 16:02:58

c:=Utf8Decode(labelPTSSer.Caption)[1];

LazReport показывает мне коды символов, а ShowMessage пустоту. Естественно, что в случае с латиницей и цифрами, всё в порядке. :-\

Не смешно. Не поняв кодирование UTF8 вы будете задавать кучу очевидных вопросов. И не мешало бы ещё пользоваться поиском по форуму.

Я очень давно про него читал. Толком так и не разобрался. Не могу же я разбираться во всём?
К тому же, кодировок куча. Есть ещё этот чёртов UNICODE. Utf16, куча других кодировок...
А у меня и так уже времени нет, ничего не сделано, да и помойка везде... :(

Ещё "сюрприз" с кодировками. Часа полтора парился.

s:=UTF8Copy(labelPTSSer.Caption,1,1);

Спасибо огромное. Работает. :)
Но очень неочевидно. По идее, если [] работает для латиницы, то ожидаешь, что он будет нормально работать для всей таблицы.
Плюс, этот модуль не включается автоматически.
Да, код UTF8Copy посмотрел я, какой-то он слегка дикий... o.O
А.Н.
постоялец
 
Сообщения: 230
Зарегистрирован: 13.03.2010 12:23:58

Re: Как выделить символ из строки?

Сообщение Mr.Smart » 04.04.2010 16:21:07

Почитайте внимательно http://ru.wikipedia.org/wiki/UTF-8, довольно всё просто.
Mr.Smart
долгожитель
 
Сообщения: 1796
Зарегистрирован: 29.03.2008 01:01:11
Откуда: из леса!

Re: Как выделить символ из строки?

Сообщение alexs » 04.04.2010 17:16:09

А.Н.
Если вы используете кодировку UTF8 - заубдьте про проямое обращение к символу по индексу в массиве. Только через функции UTF8XXXXX (delete/copy...)
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4060
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Re: Как выделить символ из строки?

Сообщение Vadim » 05.04.2010 05:28:54

А.Н. писал(а):Не могу же я разбираться во всём?

Есть такое слово, которое помогает во всём разобраться - "НАДО". :) Если надо в чём-то разбираться, Вы должны в этом разобраться, других путей нет. ;)
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 49

Рейтинг@Mail.ru
cron