Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.08.2015, 14:16   #1
Dux
Delphi Master
Форумчанин Подтвердите свой е-майл
 
Аватар для Dux
 
Регистрация: 31.03.2008
Сообщений: 803
По умолчанию Не работает проверка вхождения символа в множество для кириллицы в Delphi XE7

Перенес проект с Delphi 2007 на Delphi XE7 и столкнулся с тем, что не работает конструкция

Код:
 if edit1.text[1] in ['а'..'я', 'А'..'Я'] then
Казалось бы, обычный код, а не работает, ошибок не выдает, просто не выполняет:

Код:
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
if edit1.text[1] in ['а'..'я', 'А'..'Я'] then
showmessage('working');
end;


причем тот же вариант с английскими символами работает отлично.

Код:
if edit1.text[1] in ['a'..'z','A'..'Z' ]then
Подскажите куда копать, совсем сбился с толку, ведь на 2007 все работает (в проекте ничего не менял).

Последний раз редактировалось Dux; 11.08.2015 в 14:24.
Dux вне форума Ответить с цитированием
Старый 11.08.2015, 14:22   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Дык 2007-ой не юникодный, а XE юникодный. И в нем edit1.text string и text[i] char, а множество с символами AnsiChar. А в XE это разное, особенно в части кириллицы
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 11.08.2015 в 15:07.
Аватар вне форума Ответить с цитированием
Старый 11.08.2015, 14:25   #3
Dux
Delphi Master
Форумчанин Подтвердите свой е-майл
 
Аватар для Dux
 
Регистрация: 31.03.2008
Сообщений: 803
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Дык 2007-ой не юникодный, а XE юникодный. И в нем edit1.text string, а множество с символами AnsiString. А в XE это разное, особенно в части кириллицы
Блин.. так что мне поменять, чтобы заработала эта конструкция?
Dux вне форума Ответить с цитированием
Старый 11.08.2015, 14:31   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Да, чет эмбаркадырка in в своих делфях как-то опустила...
Используй регулярные выражения, наверное так будет проще.
Или придется строить жуткую конструкцию типа (edit1.text[1]>'a') and (edit1.text[1]<'z')
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 11.08.2015, 14:37   #5
Dux
Delphi Master
Форумчанин Подтвердите свой е-майл
 
Аватар для Dux
 
Регистрация: 31.03.2008
Сообщений: 803
По умолчанию

Ваш вариант работает

Код:
(edit1.text[1]>'а') and (edit1.text[1]<'я')

Последний раз редактировалось Dux; 11.08.2015 в 14:39.
Dux вне форума Ответить с цитированием
Старый 11.08.2015, 14:56   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Ну конечно )
Он будет работать не зависимо от кодировки символов. Только писанины чуть больше чем с in увы.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 11.08.2015, 15:05   #7
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

лучше не так.
некий Dmitry Arefiev вот тут на форуме sql.ru (тыц в далёком 2008 году предложил такое решение:
Код:
function IsRussianLetter(ACh: Char): Boolean; inline;
begin
  Result := (ACh >= 'а') and (ACh <= 'я') or 
            (ACh >= 'А') and (ACh <= 'Я') or 
            (ACh = 'ё') or (ACh = 'Ё');
end;
Serge_Bliznykov вне форума Ответить с цитированием
Старый 11.08.2015, 15:54   #8
Vapaamies
Ваш К. О.
Участник клуба
 
Аватар для Vapaamies
 
Регистрация: 26.12.2012
Сообщений: 1,755
По умолчанию

Я тоже предлагал, у меня даже проверок меньше, поскольку смотрел в таблицу Юникода.
Vapaamies вне форума Ответить с цитированием
Старый 11.08.2015, 16:39   #9
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Сообщение от Vapaamies
Я тоже предлагал, у меня даже проверок меньше
простите, коллега, не увидел/не вспомнил/не нашёл ваш пост с кодом!
Согласен с вашим решением.
Ну, пусть будет и приведённый мною выше, просто как ещё один, как вариант.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 11.08.2015, 16:56   #10
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Цитата:
Согласен с вашим решением.
А у меня каверзный вопрос: А всегда ли во всех таблицах алфавит с верхним регистром будет граничить с алфавитом с малым? Что-то мне помнится что бывают некоторые исключения, но пруф вспомнить не могу...
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
проверка на наличие кириллицы в textarea Ale}{ander JavaScript, Ajax 2 16.02.2014 22:10
Поиск в строке первого вхождения символа на СИ dannae Помощь студентам 3 26.11.2013 15:05
Множество кириллицы Sauber Помощь студентам 4 02.04.2011 12:17
Удалить из строкового значения все вхождения заданного символа. Delphi Saka Помощь студентам 10 08.03.2010 01:22
Проверка на вхождение символа во множество k1r1ch Общие вопросы C/C++ 2 01.01.2010 22:22