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

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

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

Ответить
Zebra
незнакомец
Сообщения: 4
Зарегистрирован: 30.06.2007 21:35:37

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

Сообщение Zebra »

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

Код: Выделить всё

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

Сообщение alexs »

Если в лазаре с подержкой UTF8 - то русские буквы - это набор из двух байт. А в данное множество можно включать только однобайтовые символы - т.е. английские.
Zebra
незнакомец
Сообщения: 4
Зарегистрирован: 30.06.2007 21:35:37

Сообщение Zebra »

То есть (у меня utf-8), множество русских букв объявить нельзя, я правильно понял?
Аватара пользователя
alexs
долгожитель
Сообщения: 4066
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь
Контактная информация:

Сообщение alexs »

да
wavebvg
постоялец
Сообщения: 355
Зарегистрирован: 28.02.2008 03:57:35

Сообщение wavebvg »

Можно извратиться и объявлять только вторую часть двубайтовых символов
Аватара пользователя
XProger
новенький
Сообщения: 44
Зарегистрирован: 13.08.2007 02:52:28
Откуда: Москва
Контактная информация:

Сообщение XProger »

Используй #
EvgIq
незнакомец
Сообщения: 8
Зарегистрирован: 22.08.2008 15:20:55

Сообщение EvgIq »

Делаю разбор текстового файла в 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'ом тоже не вышло.
Может подскажет кто, как избежать таких "этажей" проверок?
Аватара пользователя
Brainenjii
энтузиаст
Сообщения: 1351
Зарегистрирован: 10.05.2007 00:04:46

Сообщение Brainenjii »

Преоразовать OrgForma в UTF8?
Михаил Крамер
новенький
Сообщения: 73
Зарегистрирован: 08.02.2008 13:26:40

Сообщение Михаил Крамер »

Создать множество типа 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 секунд:
Кстати, а в чём задача-то? Могет, стоит сделать простейший "интертрепатор"
Ответить