PAGUE 6 MESES
LEVE 12 MESES
GARANTIR DESCONTO

Fórum Comparação caracteres russo #513730

15/03/2015

0

Ficarei muito grato se puder me ajudar a entender o que estou fazendo de errado neste código abaixo.

Esta função filtra apenas caracteres permitidos. No entanto, mesmo recebendo caracteres russo dentro da função, a comparação não está funcionando de modo que nada retorna. Com o idioma portugues funciona.

Já tentei usar vários tipos, mas nada funcionou. Uso Delphi XE.

Alguém poderia me ajudar ?

function SoCaracteresPermitidos(idioma, s:string):string;
var
x:Integer;
sAux:String;
begin
if idioma = 'pt' then //Portugues
begin
for x := 1 to Length(s) do
if s[x] in ['a'..'z','A'..'Z', ' ', '-', 'á', 'à', 'ã', 'â',
'ä', 'Á', 'À', 'Ã', 'Â', 'Ä', 'é', 'è', 'É', 'È',
'í', 'ì', 'Í', 'ï', 'Ì', 'ó', 'ò', 'ö', 'õ', 'ô',
'Ó', 'Ò', 'Ö', 'Õ', 'Ô', 'ú', 'ù', 'ü', 'Ú', 'Ù',
'$', 'ç', 'Ç']
then
sAux := sAux + s[x]
else
sAux := sAux + #32;
end else

if idioma = 'ru' then //Russo
begin
for x := 1 to Length(s) do
if s[x] in [' ', '-', 'А', 'a', 'Б', 'б',
'В', 'в', 'Г', 'г', 'Д', 'д', 'Е', 'е', 'Ё', 'ё',
'Ж', 'ж', 'З', 'з', 'И', 'и', 'Й', 'й', 'К', 'к',
'Л', 'л', 'М', 'м', 'Н', 'н', 'О', 'о', 'П', 'п',
'Р', 'р', 'С', 'с', 'Т', 'т', 'У', 'у', 'Ф', 'ф',
'Х', 'х', 'Ц', 'ц', 'Ч', 'ч', 'Ш', 'ш', 'Щ', 'щ',
'Ъ', 'ъ', 'Ы', 'ы', 'Ь', 'ь', 'Э', 'э', 'Ю', 'ю',
'Я', 'я']
then
sAux := sAux + s[x] //--> Não consegue entrar aqui mesmo vindo os caracteres russos no parametro
else
sAux := sAux + #32;
end;
result := LowerCase(sAux);
end;
Mil Eireli

Mil Eireli

Responder

Posts

16/03/2015

Mil Eireli

Encontrei a solução usando uma função chamada WideCompareStr.

Meu código ficou meio desajeitado, mas funcionou. Ficou assim:


function SoCaracteresPermitidos(idioma, s:string):string;
const
russo: array[1..68] of string = (' ', '-', 'А', 'a', 'Б', 'б', 'В', 'в', 'Г',
'г', 'Д', 'д', 'Е', 'е', 'Ё', 'ё', 'Ж', 'ж',
'З', 'з', 'И', 'и', 'Й', 'й', 'К', 'к', 'Л',
'л', 'М', 'м', 'Н', 'н', 'О', 'о', 'П', 'п',
'Р', 'р', 'С', 'с', 'Т', 'т', 'У', 'у', 'Ф',
'ф', 'Х', 'х', 'Ц', 'ц', 'Ч', 'ч', 'Ш', 'ш',
'Щ', 'щ', 'Ъ', 'ъ', 'Ы', 'ы', 'Ь', 'ь', 'Э',
'э', 'Ю', 'ю', 'Я', 'я');

var
x, y : Integer;
sAux : String;
begin
if copy(idioma,0,2) = 'pt' then //Portugues
begin
for x := 1 to Length(s) do
if s[x] in ['a'..'z','A'..'Z', ' ', '-', 'á', 'à', 'ã', 'â',
'ä', 'Á', 'À', 'Ã', 'Â', 'Ä', 'é', 'è', 'É', 'È',
'í', 'ì', 'Í', 'ï', 'Ì', 'ó', 'ò', 'ö', 'õ', 'ô',
'Ó', 'Ò', 'Ö', 'Õ', 'Ô', 'ú', 'ù', 'ü', 'Ú', 'Ù',
'$', 'ç', 'Ç']
then
sAux := sAux + s[x]
else
sAux := sAux + #32;
end else

if copy(idioma,0,2) = 'ru' then //Russo
begin
for x := 1 to Length(s) do
for y := 1 to Length(russo) do
if WideCompareStr(s[x], russo[y]) = 0
then
sAux := sAux + russo[y];
end;
result := LowerCase(sAux);
end;
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar