@demiancz

Как найти русские буквы в Memo на Delphi XE2?

Стоит задача посчитать сколько букв в тексте. Текст этот находится в Memo. С поиском и подсчетом английских букв никаких проблем нет. А вот с русскими беда.
Пробовал и так:
bukv = [(#65)..(#90),(#97)..(#122),(#192)..(#255)];

и так:
bukv = [(#65)..(#90),(#97)..(#122),'а'..'я','А'..'Я','ё','Ё'];

и так:
bukv = [(#65)..(#90),(#97)..(#122),'а'..'п', 'р'..'я', 'ё'];

и даже вот так решил попробовать:
bukv = [(#65)..(#90),(#97)..(#122),AnsiCHar(#192)..AnsiCHar(#255)];

и на закуску - так:
bukv = [(#65)..(#90),(#97)..(#122),AnsiCHar('А')..AnsiCHar('я')];


Ни один из вышеизложенных примеров не работает в Delphi XE2. Помогите пожалуйста!
  • Вопрос задан
  • 208 просмотров
Решения вопроса 1
HemulGM
@HemulGM Куратор тега Delphi
Delphi Developer, сис. админ
[ ] - это множество. Оно ограничено в количестве и типе данных.
Только 255 значений и только byte.
В Memo ты пишешь текст уже в Unicode, а значит, русские символы там не входят в диапазон 0..255, они имеют совсем иные значения.

По этому тут не нужно использовать множество.

Добавь функцию для проверки русский символ это или нет
var Cyrillics: string := 'абвгдеёжзийклмнопрстуфхцчшщъыьэюя';
...
function IsCyrillic(const Ch: Char): Boolean;
begin
  for var C in Cyrillics do
    if C.ToLower = Ch then Exit(True);
  Result := False;
end;
...
function CyrillicCount(const Text: string): Cardinal;
begin
  Result := 0;
  for var C in Text do
    if IsCyrillic(C) then Inc(Result);
end;
...
var Count := CyrillicCount(Memo.Text);
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@kalapanga
Буквы задать так
bukv = 'абвгд';
Проверять так
if Pos(Memo1.Lines[i][j], bukv)>0 then ...
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы