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

22/02/2009

0

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

Responder

Posts

22/02/2009

Marco Salles

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


Responder

22/02/2009

Dbergkamps10

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


Responder

23/02/2009

Paullsoftware

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


Responder

23/02/2009

Walterhqd

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:


Responder

05/12/2019

Eduardo Silva

só não deixa Ç minusculo ç
Responder

Que tal ter acesso a um e-book gratuito que vai te ajudar muito nesse momento decisivo?

Ver ebook

Recomendado pra quem ainda não iniciou o estudos.

Eu quero
Ver ebook

Recomendado para quem está passando por dificuldades nessa etapa inicial

Eu quero

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

Aceitar