Объявление константы-множества

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

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

Объявление константы-множества

Сообщение Zebra » 14.08.2008 21:55:07

Подскажите, пожалуйста, почему Lazarus считает неверным такое объявление константы:

Код: Выделить всё
const
  RusLetters : set of char = ['А', 'Б', 'В', 'Г', 'Д', 'Е', 'Ё', 'Ж', 'З', 'И',
                              'Й', 'К', 'Л', 'М', 'Н', 'О', 'П', 'Р', 'С', 'Т',
                              'У', 'Ф', 'Х', 'Ц', 'Ч', 'Ш', 'Щ', 'Ь', 'Ы', 'Ъ',
                              'Э', 'Ю', 'Я', 'а', 'б', 'в', 'г', 'д', 'е', 'ё',
                              'ж', 'з', 'и', 'й', 'к', 'л', 'м', 'н', 'о', 'п',
                              'р', 'с', 'т', 'у', 'ф', 'х', 'ц', 'ч', 'ш', 'щ',
                              'ь', 'ы', 'ъ', 'э', 'ю', 'я']; 
Zebra
незнакомец
 
Сообщения: 4
Зарегистрирован: 30.06.2007 21:35:37

Re: Объявление константы-множества

Сообщение alexs » 14.08.2008 22:14:33

Если в лазаре с подержкой UTF8 - то русские буквы - это набор из двух байт. А в данное множество можно включать только однобайтовые символы - т.е. английские.
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4060
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Re: Объявление константы-множества

Сообщение Zebra » 14.08.2008 22:43:59

То есть (у меня utf-8), множество русских букв объявить нельзя, я правильно понял?
Zebra
незнакомец
 
Сообщения: 4
Зарегистрирован: 30.06.2007 21:35:37

Re: Объявление константы-множества

Сообщение alexs » 14.08.2008 23:34:26

да
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4060
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Re: Объявление константы-множества

Сообщение wavebvg » 15.08.2008 06:17:56

Можно извратиться и объявлять только вторую часть двубайтовых символов
wavebvg
постоялец
 
Сообщения: 354
Зарегистрирован: 28.02.2008 04:57:35

Re: Объявление константы-множества

Сообщение XProger » 15.08.2008 14:23:52

Используй #
Аватара пользователя
XProger
новенький
 
Сообщения: 44
Зарегистрирован: 13.08.2007 02:52:28
Откуда: Москва

Re: Объявление константы-множества

Сообщение EvgIq » 06.10.2008 16:57:29

Делаю разбор текстового файла в win1251.
Пришлось извратиться так:
Код: Выделить всё
...
OrgForma:AnsiString;
...

If (Pos(UTF8toAnsi('ДОК'),OrgForma)>0) Or
         (Pos(UTF8toAnsi('Док'),OrgForma)>0) Or
         (Pos(UTF8toAnsi('док'),OrgForma)>0) Or
         (Pos(UTF8toAnsi('ДОЗ'),OrgForma)>0) Or
         (Pos(UTF8toAnsi('Доз'),OrgForma)>0) Or
         (Pos(UTF8toAnsi('доз'),OrgForma)>0) Or
         (Pos(UTF8toAnsi('МФ'),OrgForma)>0) Or ...
и т.д.

Создать множество типа AnsiString - не получается.
Case'ом тоже не вышло.
Может подскажет кто, как избежать таких "этажей" проверок?
EvgIq
незнакомец
 
Сообщения: 8
Зарегистрирован: 22.08.2008 15:20:55

Re: Объявление константы-множества

Сообщение Brainenjii » 06.10.2008 17:40:57

Преоразовать OrgForma в UTF8?
Аватара пользователя
Brainenjii
энтузиаст
 
Сообщения: 1351
Зарегистрирован: 10.05.2007 00:04:46

Re: Объявление константы-множества

Сообщение Михаил Крамер » 06.10.2008 18:09:24

Создать множество типа AnsiString - не получается.


А на фига?
Код: Выделить всё
const
     a: array [0..2] of AnsiString = ('fff', 'ddd', 'gggg');
function in_a(s: AnsiString): boolean;
var i: byte;
begin
    in_a:= false;
    for i:= 0 to 2 do
         if a[i] = s then
         begin
              in_a:= true;
              Exit;
          end;
end;


Ну или что-то вроде.

Добавлено спустя 2 минуты 19 секунд:
Кстати, а в чём задача-то? Могет, стоит сделать простейший "интертрепатор"
Михаил Крамер
новенький
 
Сообщения: 73
Зарегистрирован: 08.02.2008 14:26:40


Вернуться в Lazarus

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

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

Рейтинг@Mail.ru