Função para deixa a primeira letra em maiúscula
22/02/2009
0
Estou usando uma função para deixa a primeira letra de um nome em MAIÚSCULA, sem alteras as preposições dos nomes do,das,dos...
Só que há um problema que não consegui resolver:
Essa função não faz uppercase na preposição ´e´, até ai tudo bem, mas tambem não faz upercase em palavras começadas em ´e´, sera que alguem poderia me dizer o que está errado? :oops:
function UpperNome(const Nome: string): string; var x: Integer; lista: array[0..4] of string[03]; function NaoAchaPreposicao(Palavra: string): Boolean; var x: Integer; begin Result := True; for x := 0 to 4 do if Trim(Palavra) = lista[x] then Result := False; end; begin Result := Nome; lista[0] := ´das´; lista[1] := ´dos´; lista[2] := ´de´; lista[3] := ´do´; lista[4] := ´da´; Result := UpCase(Result[1]) + Copy(Result, 2, Length(Result)); for x := 2 to Length(Nome) do begin if Nome[x] = 32 then if Copy(Nome, x + 1, 1) <> ´e´ then if NaoAchaPreposicao(Copy(Nome, x + 1, 3)) then Result := Copy(Result, 1, x) + UpCase(Result[x + 1]) + Copy(Result, x + 2, Length(Result)); end; end;
Walterhqd
Posts
22/02/2009
Marco Salles
function Tform1.FormataNome(sNome: String): string; const excecao: array[0..5] of string = (´ da ´, ´ de ´, ´ do ´, ´ das ´, ´ dos ´, ´ e ´); var tamanho, j: integer; i: byte; begin Result := AnsiLowerCase(sNome); tamanho := Length(Result); for j := 1 to tamanho do // Se é a primeira letra ou se o caracter anterior é um espaço if (j = 1) or ((j>1) and (Result[j-1]=Chr(32))) then Result[j] := AnsiUpperCase(Result[j])[1]; for i := 0 to Length(excecao)-1 do result:= StringReplace(result,excecao[i],excecao[i],[rfReplaceAll, rfIgnoreCase]); end;
ela irá te atender Bem
22/02/2009
Dbergkamps10
function UpperNome(const Nome: string): string; var x: Integer; lista: array[0..4] of string[03]; function NaoAchaPreposicao(Palavra: string): Boolean; var x: Integer; begin Result := True; for x := 0 to 4 do if Trim(Palavra) = lista[x] then Result := False; end; begin Result := Nome; lista[0] := ´das´; lista[1] := ´dos´; lista[2] := ´de´; lista[3] := ´do´; lista[4] := ´da´; Result := UpCase(Result[1]) + Copy(Result, 2, Length(Result)); for x := 2 to Length(Nome) do begin if Nome[x] = 32 then if Copy(Nome, x + 1, 1) <> ´ e ´ then if NaoAchaPreposicao(Copy(Nome, x + 1, 3)) then Result := Copy(Result, 1, x) + UpCase(Result[x + 1]) + Copy(Result, x + 2, Length(Result)); end; end;
Espero ter ajudado.
Att
Dalton
23/02/2009
Paullsoftware
23/02/2009
Walterhqd
Muito obrigado Marco Salles, paullsoftware, dbergkamps10 por terem respondido meu tópico :mrgreen:
Clique aqui para fazer login e interagir na Comunidade :)