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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 18.11.2021, 18:54   #1
demiancz
Форумчанин
 
Регистрация: 28.09.2010
Сообщений: 246
По умолчанию Посчитать количество русских букв в Memo (Delphi XE2)

Нужно посчитать количество букв в Memo. Я эти символы помечаю так:
Код:
bukv = [#65..#90,#97..#122,#188..#255,#165,#168,#170,#175,#179,#180,#184,#186];
Но русские буквы программа никак не хочет считать. С английскими проблем нет. Всё отлично работает. А вот русскими беда.
Пробовал разные варианты:
Код:
bukv = [(#65)..(#90),(#97)..(#122),'а'..'я','А'..'Я','ё','Ё'];
Не работает.
Код:
bukv = [(#65)..(#90),(#97)..(#122),'а'..'п', 'р'..'я', 'ё'];
Не работает.
Как я понял проблема в самом Delphi XE2. Но должен же быть способ как-то решить эту задачу. Надеюсь на вашу помощь.
Смотреть фильмы HD Фильмы для планшетов
demiancz вне форума Ответить с цитированием
Старый 18.11.2021, 20:09   #2
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 16,218
По умолчанию

Множества в Паскале вообще довольно ущербная конструкция, так как элементы множества это байты (ну или ASCII-коды символов). В случае с юникодом, русские буквы во множество не загнать.

Можно создать строку с нужными символами:
const bukv = 'abcd...АБВГ...'; // придется перечислять вручную все буквы.

А поиск буквы делать с помощью функции pos.

Последний раз редактировалось Arigato; 18.11.2021 в 21:18.
Arigato на форуме Ответить с цитированием
Старый 18.11.2021, 20:33   #3
demiancz
Форумчанин
 
Регистрация: 28.09.2010
Сообщений: 246
По умолчанию

Цитата:
Сообщение от Arigato Посмотреть сообщение
Множества в Паскале вообще довольно ущербная конструкция, так как элементы множества это байты (ну или ASCII-коды символов). В случае с юникодом, русские буквы во множество не загнать.

Можно создать строку с нужными символами:
const bukv = 'abcd...АБВГ...'; // придется перечислять вручную все буквы.

А поиск буквы делать с помощью функции strpos.
Мне интересно решение с множествами. Ведь в Turbo Delphi всё отлично работает. Почему же не работает в Delphi XE2?
Ну и для примера, вот мой код:
Код:
k:=0;
  for i:=1 to length(s) do
  begin
    if s[i] in bukv then k:=k+1;
  end;

Label1.Caption := IntToStr(k); // выводим количество цифр
Как мне тут можно использовать strpos, чтобы узнать количество букв в Memo?
Смотреть фильмы HD Фильмы для планшетов
demiancz вне форума Ответить с цитированием
Старый 18.11.2021, 21:12   #4
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 16,218
По умолчанию

Можно StrScan вместо множества заюзать.
Код:
const
  bukv = 'abcd...АБВГ...';
var
  i, k: Integer;
begin
  k := 0;
  for i := 1 to Length(Memo1.Text) do begin
    if StrScan(bukv, Memo1.Text[i]) <> nil
      then inc(k);
  end;
  Label1.Caption := IntToStr(k);
Arigato на форуме Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Посчитать количество слов из трёх букв в данной строке. ALEXandr20333 Паскаль, Turbo Pascal, PascalABC.NET 1 29.06.2014 19:05
Посчитать количество латинский букв в строке lookser PHP 14 25.04.2013 19:54
delphi дублирование русских букв string BanzoO Помощь студентам 2 28.09.2011 21:52
Pascal.найти количество русских букв Мaрина Помощь студентам 5 28.06.2011 16:29
Ввод русских букв в Delphi Аццкий Нуп Помощь студентам 3 25.06.2008 23:27