ActiveDelphi - Índice do Fórum ActiveDelphi
.: O site do programador Delphi! :.
 
 FAQFAQ   PesquisarPesquisar   MembrosMembros   GruposGrupos   RegistrarRegistrar 
 PerfilPerfil   Entrar e ver Mensagens ParticularesEntrar e ver Mensagens Particulares   EntrarEntrar 

Funcao capitalize string

 
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Delphi
Exibir mensagem anterior :: Exibir próxima mensagem  
Autor Mensagem
gutonovaes19
Novato
Novato


Registrado: Quarta-Feira, 18 de Junho de 2008
Mensagens: 50

MensagemEnviada: Ter Fev 20, 2018 4:08 pm    Assunto: Funcao capitalize string Responder com Citação

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
Ver o perfil de Usuários Enviar Mensagem Particular
natanbh1
Colaborador
Colaborador


Registrado: Terça-Feira, 15 de Março de 2011
Mensagens: 3093
Localização: Belo Horizonte - MG

MensagemEnviada: Ter Fev 20, 2018 4:48 pm    Assunto: Responder com Citação

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
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail
gutonovaes19
Novato
Novato


Registrado: Quarta-Feira, 18 de Junho de 2008
Mensagens: 50

MensagemEnviada: Ter Fev 20, 2018 4:56 pm    Assunto: [RESOLVIDO] Capitalize Responder com Citação

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
Ver o perfil de Usuários Enviar Mensagem Particular
natanbh1
Colaborador
Colaborador


Registrado: Terça-Feira, 15 de Março de 2011
Mensagens: 3093
Localização: Belo Horizonte - MG

MensagemEnviada: Ter Fev 20, 2018 5:08 pm    Assunto: Re: [RESOLVIDO] Capitalize Responder com Citação

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
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail
guilherme_consolacao
Novato
Novato


Registrado: Terça-Feira, 26 de Mai de 2020
Mensagens: 1

MensagemEnviada: Ter Mai 26, 2020 2:05 am    Assunto: Re: Funcao capitalize string Responder com Citação

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
Ver o perfil de Usuários Enviar Mensagem Particular
Mostrar os tópicos anteriores:   
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Delphi Todos os horários são GMT - 3 Horas
Página 1 de 1

 
Ir para:  
Enviar Mensagens Novas: Proibido.
Responder Tópicos Proibido
Editar Mensagens: Proibido.
Excluir Mensagens: Proibido.
Votar em Enquetes: Proibido.


Powered by phpBB © 2001, 2005 phpBB Group
Traduzido por: Suporte phpBB