GARANTIR DESCONTO

Fórum Função para deixa a primeira letra em maiúscula #368628

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

Gostei + 0

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

Gostei + 0

23/02/2009

Paullsoftware

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


Responder

Gostei + 0

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

Gostei + 0

05/12/2019

Eduardo Silva

só não deixa Ç minusculo ç
Responder

Gostei + 0

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

Aceitar