Delphi

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.

1 responder
  1. Carlos Eduardo
    Carlos Eduardo says:

    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

    Responder

Deixe uma resposta

Quer participar da discussão?
Fique a vontade para contribuir!

Deixe uma resposta

O seu endereço de email não será publicado Campos obrigatórios são marcados *

Você pode usar estas tags e atributos de HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>