Exibir mensagem anterior :: Exibir próxima mensagem |
Autor |
Mensagem |
gutonovaes19 Novato
Registrado: Quarta-Feira, 18 de Junho de 2008 Mensagens: 50
|
Enviada: Ter Fev 20, 2018 4:08 pm Assunto: Funcao capitalize string |
|
|
Pessoal, achei uma função na web para transformar o 1o caracter de uma frase em maíúsculo e os demais em minusculos. Porém, não funciona com caacteres acentuados.
Aí vai a rotina. Alguém sabe como resolver ?
function CapitalizeString(const s: string; const CapitalizeFirst: Boolean = True): string;
const
ALLOWEDCHARS = ['a'..'z', '_'];
var
Index: Integer;
bCapitalizeNext: Boolean;
begin
bCapitalizeNext := CapitalizeFirst;
Result := LowerCase(s);
if Result <> EmptyStr then
for Index := 1 to Length(Result) do
if bCapitalizeNext then begin
Result[Index] := UpCase(Result[Index]);
bCapitalizeNext := False;
end else
if NOT CharInSet(Result[Index], ALLOWEDCHARS) then
bCapitalizeNext := True;
end;
extraído de http://www.delphigeist.com/search/label/utility%20functions |
|
Voltar ao Topo |
|
|
natanbh1 Colaborador
Registrado: Terça-Feira, 15 de Março de 2011 Mensagens: 3093 Localização: Belo Horizonte - MG
|
Enviada: Ter Fev 20, 2018 4:48 pm Assunto: |
|
|
Segue outra função para esta finalidade sem este problema:
Código: | function Capitaliza(s: string): string;
var
flag: Boolean;
i: Byte;
t: string;
begin
flag := True;
s := AnsiLowerCase(s);
t := EmptyStr;
for i := 1 to Length(s) do
begin
if flag then
t := t + AnsiUpperCase(s[i])
else
t := t + s[i];
flag := (s[i] = ' ')
end;
Result := t;
end; |
Exemplo de uso:
Código: | ShowMessage(Capitaliza('SÃO PAULO'));// Resultado: São Paulo |
_________________ ''A persistência é o caminho para o êxito.''
Charlie Chaplin |
|
Voltar ao Topo |
|
|
gutonovaes19 Novato
Registrado: Quarta-Feira, 18 de Junho de 2008 Mensagens: 50
|
Enviada: Ter Fev 20, 2018 4:56 pm Assunto: [RESOLVIDO] Capitalize |
|
|
natanbh1 escreveu: | Segue outra função para esta finalidade sem este problema:
Código: | function Capitaliza(s: string): string;
var
flag: Boolean;
i: Byte;
t: string;
begin
flag := True;
s := AnsiLowerCase(s);
t := EmptyStr;
for i := 1 to Length(s) do
begin
if flag then
t := t + AnsiUpperCase(s[i])
else
t := t + s[i];
flag := (s[i] = ' ')
end;
Result := t;
end; |
Exemplo de uso:
Código: | ShowMessage(Capitaliza('SÃO PAULO'));// Resultado: São Paulo |
|
Obrigado Natan. Vou avaliar outras situações como por exemplo frases iniciadas ou contidas entre parenteses, colchetes e similares. |
|
Voltar ao Topo |
|
|
natanbh1 Colaborador
Registrado: Terça-Feira, 15 de Março de 2011 Mensagens: 3093 Localização: Belo Horizonte - MG
|
Enviada: Ter Fev 20, 2018 5:08 pm Assunto: Re: [RESOLVIDO] Capitalize |
|
|
gutonovaes19 escreveu: | Obrigado Natan. Vou avaliar outras situações como por exemplo frases iniciadas ou contidas entre parenteses, colchetes e similares. |
Neste caso, se não forem muitas exceções você pode adiciona-las na linha de código da variável Flag.
Código: | flag := (s[i] in [' ','[',']','(',')']); |
Adicionei além do espaço os colchetes e parenteses.
Segue função alterada:
Código: | function Capitaliza(s: string): string;
var
flag: Boolean;
i: Byte;
t: string;
begin
flag := True;
s := AnsiLowerCase(s);
t := EmptyStr;
for i := 1 to Length(s) do
begin
if flag then
t := t + AnsiUpperCase(s[i])
else
t := t + s[i];
flag := (s[i] in [' ', '[',']', '(', ')']);
end;
Result := t;
end;
|
Exemplo de uso:
Código: | ShowMessage(Capitaliza('[SÃO PAULO]'));//Resultado: [São Paulo] |
_________________ ''A persistência é o caminho para o êxito.''
Charlie Chaplin |
|
Voltar ao Topo |
|
|
guilherme_consolacao Novato
Registrado: Terça-Feira, 26 de Mai de 2020 Mensagens: 1
|
Enviada: Ter Mai 26, 2020 2:05 am Assunto: Re: Funcao capitalize string |
|
|
gutonovaes19 escreveu: | Pessoal, achei uma função na web para transformar o 1o caracter de uma frase em maíúsculo e os demais em minusculos. Porém, não funciona com caacteres acentuados.
Aí vai a rotina. Alguém sabe como resolver ?
function CapitalizeString(const s: string; const CapitalizeFirst: Boolean = True): string;
const
ALLOWEDCHARS = ['a'..'z', '_'];
var
Index: Integer;
bCapitalizeNext: Boolean;
begin
bCapitalizeNext := CapitalizeFirst;
Result := LowerCase(s);
if Result <> EmptyStr then
for Index := 1 to Length(Result) do
if bCapitalizeNext then begin
Result[Index] := UpCase(Result[Index]);
bCapitalizeNext := False;
end else
if NOT CharInSet(Result[Index], ALLOWEDCHARS) then
bCapitalizeNext := True;
end;
extraído de http://www.delphigeist.com/search/label/utility%20functions |
Isso acontece porque as funções UpCase e LowerCase estão obsoletas. Para corrigir o problema basta utilizar as funções AnsiUpperCase e AnsiLowerCase para tratar os caracteres acentuados. |
|
Voltar ao Topo |
|
|
|