Como dividir uma String em um Array utilizando Delphi
Isso pode parecer básico, mas no final das contas é muito útil e muitos não sabem, então resolvi compartilhar aqui no blog.
Muitas vezes temos que ler o conteúdo de uma string que contém várias informações separadas por algum caractere, geralmente isso ocorre em leitura de arquivos texto. Imagine a linha abaixo, onde você precisa identificar o conteúdo separado por vírgulas, cada string está entre aspas porque você pode ter conteúdos como endereço onde a vírgula é parte da string e não o delimitador.
“Barack Obama”, “President”, “United States”, “04/08/1961”
Utilizando TStringList podemos definir o delimitador a ser utilizado e desta forma percorrer o StringList conforme o exemplo abaixo.
program Project1;
{$APPTYPE CONSOLE}
uses
SysUtils,
Classes;
procedure Split(const Delimiter: Char; Value: string; const Strings: TStrings);
begin
Assert(Assigned(Strings));
Strings.Clear;
Strings.DelimitedText := Value;
Strings.Delimiter := Delimiter;
end;
var
List: TStringList;
I : Integer;
begin
try
List := TStringList.Create;
try
Split(',','"Barack Obama","President","United States","04/08/1961"', List);
for I := 0 to List.Count -1 do
Writeln(List[I]);
Readln;
finally
List.Free;
end;
except
on E: Exception do begin
Writeln(E.ClassName, ': ', E.Message);
Readln;
end;
end;
end.
O resultado ao executar este programa será:
– Barack Obama
– President
– United States
– 04/08/1961
Simples, mas útil.




Olá Andreano,
Temos também uma forma ainda mais prática com a função “ExtractStrings” da unit Classes.
function ExtractStrings(Separators, WhiteSpace: TSysCharSet; Content: PChar; Strings: TStrings): Integer;
Separator – É um array onde você pode definir vários separadores
WhiteSpace – É um Array onde você define os caracteres que devem ser Ignorados quando ocorrerem no inicio da String.
Content – É a String de onde se deseja extrais as substrings.
E a Função ainda retorna o número de Substrings extraídas.
Neste caso seria +/- assim:
…
const
sStrings = ‘”Barack Obama”,”President”,”United States”,”04/08/1961″‘;
var
List: TStringList;
I,
iRetorno:Integer;
begin
Lista := TStringList.Create;
try
try
iRetorno := ExtractStrings([‘;’],[‘ ‘],PChar(sStrings), List);
for I := 0 to iRetorno do
Writeln(List[I]);
Readln;
except
on E: Exception do begin
Writeln(E.ClassName, ‘: ‘, E.Message);
Readln;
end;
finally
FreeAndNil(List);
end;
end;
Uma das vantagens é que podemos passar vários delimitadores para a mesma string.
abraços
Carlos Eduardo Paulino
cadumicro@hotmail.com