Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Символ кирилицы в строке. Как определить? [D7]


Страницы:   1 2 3

cruiser ©   (2008-10-13 14:48:00) 

Уважаемые мастера! Как определить, есть ли в строковой переменной типа string символы кирилицы? Т.е. например, определить нахождение буквы "и" в строке "prиmer". Спасибо!


DevilDevil   (2008-10-13 18:53:00) [21]

const
 RussianChars: set of char = ['а'..'я', 'А'..'Я', 'ё', 'Ё'];

function RusChar(const S: string): integer;
begin
 for Result := 1 to Length(S) do
 if (S[Result] in RussianChars) then exit;

 Result := 0;
end;


вроде так.

Присоединяючь (продолжаю) к вопросу.
Если я имею идентификатор языка, можно ли посредством WinAPI определить список кодов алфавита этого языка: строчные и прописные. Имеется ли возможность отделать большие буквы от маленьких, имея идентификатор языка? Как получить список языков и их идентификаторов ?


{RASkov}   (2008-10-13 18:17:00) [22]

> [22] Anatoly Podgoretsky ©   (13.10.08 18:04)

Да кто его знает.... может и плохие для автора...
По мне - они все хорошие :)


Anatoly Podgoretsky   (2008-10-13 18:04:00) [23]

> {RASkov}  (13.10.2008 17:20:20)  [20]

Ну да и точка, и запятая тоже плохие символы.


{RASkov}   (2008-10-13 17:21:00) [24]

> '0'..'1'

т.е. '0'..'9' :) неважно...)


{RASkov}   (2008-10-13 17:20:00) [25]

Для более привиредливых вторая функция и например наборы "плохих" символов:
const Lat = ['A'..'z'];
     LatAndDig = ['A'..'z', '0'..'1'];


ну и вызов
if IsExistsBadChar(Edit1.Text, Lat) then....
^)


{RASkov}   (2008-10-13 17:13:00) [26]

> [18] Anatoly Podgoretsky ©   (13.10.08 17:10)

И да и нет.) Он общий... а автору это не важно.... ему важно, чтоб "и" небыло в prиmere)
Скажем так.... Латинских символов с кодом выше 127 нет, и наоборот.... нет национальных с кодом ниже 128....
:)


Anatoly Podgoretsky   (2008-10-13 17:10:00) [27]


> Символ 5 - это ниже 127(53) значит относится к латинице.
> ...

И CRLF тоже.


Anatoly Podgoretsky   (2008-10-13 17:08:00) [28]

> Правильный$Вася  (13.10.2008 16:17:11)  [11]

Нет


{RASkov}   (2008-10-13 17:05:00) [29]

> [3] cruiser ©   (13.10.08 14:56)
> Кодировка может быть разной.

D7 и String....
Все равно символы национального алфавита распологаются во второй половине значений байта.... т.е. со 128...


> например, определить нахождение буквы "и" в строке "prиmer".

Уже сказанного и этого:
function IsAllLatinChar(S: String): Boolean;
var N: Integer;
begin
 Result:=True;
 for N:=1 to Length(S) do begin
  Result:=ORD(S[N])<128;
  if not Result then Exit;
 end;
end;

type TBadChar = Set of Char;
function IsExistsBadChar(S: String; BadCh: TBadChar): Boolean;
var N: Integer;
begin
 Result:=False;
 for N:=1 to Length(S) do
  if S[N] in BadCh then begin
   Result:=True;
   Exit;
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
 if IsAllLatinChar(Edit1.Text) then ShowMessage('Строка не содержит символов национальной кодировки') else
  ShowMessage('В строке присутствуют символы национально кодировки');
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
 if IsExistsBadChar(Edit1.Text, ['А'..'я', 'Ё', 'ё', #0..#31]) then ShowMessage('Строка содержит не допустимые символы') else
  ShowMessage('Всё нормально:)');
end;

...будет достаточно.


{RASkov}   (2008-10-13 16:37:00) [30]

> символ "5" - это латиница?

Символ 5 - это ниже 127(53) значит относится к латинице.... А вообще это цифра.... и как уж ее нужно идентифицировать автору - это его дело...
:)


Palladin   (2008-10-13 16:29:00) [31]


> cruiser ©   (13.10.08 14:48) 

для чего это нужно?


Anatoly Podgoretsky   (2008-10-13 16:21:00) [32]

128-52(латиница) = 76, что делать с этим прикажешь.
Начинать надо с определения, что такое кирилица, с учетом [3] и что такое НЕ. Ну и если после этого появятся вопросы, то пригласить программиста.


Anatoly Podgoretsky   (2008-10-13 16:19:00) [33]


> cruiser ©   (13.10.08 15:06) [6]

Противоречит этому

> Кодировка может быть разной. [3]


Правильный$Вася   (2008-10-13 16:17:00) [34]


> Все что выше 127 - не латиница...?

символ "5" - это латиница?


{RASkov}   (2008-10-13 16:01:00) [35]

Может достаточно:
Все что выше 127 - не латиница...?


Правильный$Вася   (2008-10-13 15:24:00) [36]

по-любому [1] читать и думать


cruiser   (2008-10-13 15:18:00) [37]

запущу, но сейчас нет под руками делфи :) спасибо за советы!


Vlad Oshin   (2008-10-13 15:14:00) [38]

а запустить да посмотреть?


cruiser   (2008-10-13 15:06:00) [39]

Спасибо! Нашел такую постановку решения:
if s[i] in ['a'..'Я', 'A'..'Я']) ] then showmessage ('кирилица '+s[i])
не пойдет такой код вместо if (ord(s[i])>=ord('а')) and (ord(s[i])<=ord('я'))  ?


Сергей М.   (2008-10-13 15:04:00) [40]


> Может можно с этой стороны посмотреть


Те же фаберже, только вид сбоку)


Страницы:   1 2 3

Наверх

Титульная страница Поиск, карта сайта Написать письмо