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
- Remove espaços extras no início e no fim.
- Separa os nomes em um array.
- Abrevia os nomes intermediários (exceto artigos e preposições curtas).
- 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