![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Символ кирилицы в строке. Как определить? [D7]
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]
> Может можно с этой стороны посмотреть
Те же фаберже, только вид сбоку)