Como Abreviar Nomes no Delphi

Esta função permite abreviar nomes próprios, mantendo o primeiro e o último nome completos e abreviando os intermediários.

Código otimizado

function AbreviaNome(Nome: String): String;
var
  Nomes: array[1..20] of string;
  i, TotalNomes: Integer;
begin
  Nome := Trim(Nome);
  Result := Nome;

  { Adiciona um espaço no final para facilitar a busca de palavras }
  Nome := Nome + ' ';

  { Identifica a posição do primeiro espaço }
  i := Pos(' ', Nome);
  if i > 0 then
  begin
    TotalNomes := 0;

    { Separa todos os nomes }
    while i > 0 do
    begin
      Inc(TotalNomes);
      Nomes[TotalNomes] := Copy(Nome, 1, i - 1);
      Delete(Nome, 1, i);
      i := Pos(' ', Nome);
    end;

    { Se houver mais de dois nomes, abreviar os intermediários }
    if TotalNomes > 2 then
    begin
      for i := 2 to TotalNomes - 1 do
      begin
        if Length(Nomes[i]) > 3 then
          Nomes[i] := Nomes[i][1] + '.';
      end;
    end;

    { Monta o resultado final }
    Result := '';
    for i := 1 to TotalNomes do
      Result := Result + Trim(Nomes[i]) + ' ';

    Result := Trim(Result);
  end;
end;

Como Funciona

  1. Remove espaços extras no início e no fim.
  2. Separa os nomes em um array.
  3. Abrevia os nomes intermediários (exceto artigos e preposições curtas).
  4. Retorna o nome formatado com as abreviações aplicadas.

Exemplo de Uso

procedure TForm1.Button1Click(Sender: TObject);
var
  NomeAbreviado: string;
begin
  NomeAbreviado := AbreviaNome('Carlos Eduardo da Silva');
  ShowMessage(NomeAbreviado);  // Saída: Carlos E. da Silva
end;

Benefícios da Otimização

  • Evita repetições de código
  • Usa Trim corretamente para evitar espaços extras
  • Melhor estrutura e legibilidade
  • Facilidade de adaptação para incluir regras adicionais

Posts Similares