Fonte: www.activedelphi.com.br
Algumas vezes precisamos transformar, via programação, um nome como "Fulano Beltrano Ciclano" em "Fulano B. Ciclano". Veja nesta dica uma função para abreviar nomes completos e resolver casos como este.
Observação: É importante lembrar que o código ASCII #32 representa o caracter "espaço".
function AbreviarNome(Nome: String): String;
var
Nomes: array[1..20] of string;
i, TotalNomes: Integer;
begin
Nome := Trim(Nome);
Result := Nome;
Nome := Nome + #32;
i := Pos(#32, Nome);
if i > 0 then
begin
TotalNomes := 0;
while i > 0 do
begin
Inc(TotalNomes);
Nomes[TotalNomes] := Copy(Nome, 1, i - 1);
Delete(Nome, 1, i);
i := Pos(#32, Nome);
end;
if TotalNomes > 2 then
begin
for i := 2 to TotalNomes - 1 do
if Length(Nomes[i]) > 3 then
Nomes[i] := Nomes[i][1] + '.';
Result := '';
for i := 1 to TotalNomes do
Result := Result + Trim(Nomes[i]) + #32;
Result := Trim(Result);
end;
end;
end;
Para testá-la, coloque em um form dois edits e um button, fazendo no onClick do button:
procedure TForm1.Button1Click(Sender: TObject);
begin
Edit2.Text := AbreviarNome(Edit1.Text);
end;
Observação: É importante lembrar que o código ASCII #32 representa o caracter "espaço".
function AbreviarNome(Nome: String): String;
var
Nomes: array[1..20] of string;
i, TotalNomes: Integer;
begin
Nome := Trim(Nome);
Result := Nome;
Nome := Nome + #32;
i := Pos(#32, Nome);
if i > 0 then
begin
TotalNomes := 0;
while i > 0 do
begin
Inc(TotalNomes);
Nomes[TotalNomes] := Copy(Nome, 1, i - 1);
Delete(Nome, 1, i);
i := Pos(#32, Nome);
end;
if TotalNomes > 2 then
begin
for i := 2 to TotalNomes - 1 do
if Length(Nomes[i]) > 3 then
Nomes[i] := Nomes[i][1] + '.';
Result := '';
for i := 1 to TotalNomes do
Result := Result + Trim(Nomes[i]) + #32;
Result := Trim(Result);
end;
end;
end;
Para testá-la, coloque em um form dois edits e um button, fazendo no onClick do button:
procedure TForm1.Button1Click(Sender: TObject);
begin
Edit2.Text := AbreviarNome(Edit1.Text);
end;
Nenhum comentário:
Postar um comentário