Função para deixa a primeira letra em maiúscula

Delphi

22/02/2009

Boa Tarde :)

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

Walterhqd

Curtidas 0

Respostas

Marco Salles

Marco Salles

22/02/2009

Sugiro a Vc usar a função ja conhecida

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


GOSTEI 0
Dbergkamps10

Dbergkamps10

22/02/2009

Tente assim:
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


GOSTEI 0
Paullsoftware

Paullsoftware

22/02/2009

a função do Marcos é tranquila uso ela por aqui e funciona perfeitamente!!! :lol:


GOSTEI 0
Walterhqd

Walterhqd

22/02/2009

A função do Marco Salles funcionou perfeitamente aqui :D e é bem mais simples que a minha :shock:

Muito obrigado Marco Salles, paullsoftware, dbergkamps10 por terem respondido meu tópico :mrgreen:


GOSTEI 0
Eduardo Silva

Eduardo Silva

22/02/2009

só não deixa Ç minusculo ç
GOSTEI 0
POSTAR