ExtractStrings: Você conhece?

Pessoal, resolvi começar a postar aqui, funções do delphi que normalmente quebram muitos galhos, e, por desconhece-las, acabamos “rebolando” pra criar algo “parecido”. E não pensem que não estou falando de mim! 🙂

Uma função muito interessante e que tem uma enorme utilidade é a função ExtracStrings. Essa função preenche uma lista (StringList), com substrings de uma string.

Imagine que você precise ler um arquivo CSV (separado por ponto-e-vírgula). Dai você pergunta: “Como vou separar as colunas?“; a primeira idéia é criar uma função para localizar (Pos) o primeiro ponto-e-vírgula e extrair o fragmento da string (Copy), e assim sucessivamente, atire a primeira pedra que nunca fez assim!

Pois é! Perdemos nosso precioso tempo reinventando a roda.

Veja a sintaxe da função ExtractString:

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

A Função retorna o número de Substrings extraídas.

Veja um pequeno exemplo de utilização:

procedure TForm1.Button1Click(Sender: TObject);
const

SDados = ‘Cristiano Martins Alves; 28 Anos; Casado; São Paulo; SP’;
var
Lista: TStringList;
iRetorno:Integer;

begin

Lista := TStringList.Create;

try

iRetorno :=
ExtractStrings([‘;’],[‘ ‘],PChar(sDados),Lista);
if
iRetorno > 0 then
ShowMessage(Lista.Text);

finally

FreeAndNil(Lista);

end
;

end
;

Veja o resultado:

Repare que na nossa constante existe um espaço entre o nome e a idade, mas ele foi ignorado conforme definido no segundo parâmetro.

É isso ai pessoal! Não deixem de comentar o blog!

Sobre Cristiano Martins

Programador Delphi desde 2000, desenvolvendo aplicações Client/Server. Colunista da Revista ActiveDelphi Membro Fundador do DUG-SP ( www.dug-sp.com ) Ver todos os artigos de Cristiano Martins

4 respostas para “ExtractStrings: Você conhece?

  • Anonymous

    Olá, beleza, muito bom este site, gostei deste commando, heheh, eu estou com um programa aqui e estava prestes a usar o Pos hehehe, esse comando caiu como uma luva para os meus propósitos.

  • Soares(soares@dalcar.com.br)

    Olá, tdo bm?
    Cara, gostei muito desse artigo, mas gostaria de saber +… hehehe
    Como faço para ler de um arquivo com várias linhas e gerar um outro arquivo?
    Como faço para atribuir a um edit só a primeira coluna?
    ex: unidade;contrato;nome;valor.

  • Cristiano Martins Alves

    Olá, Tudo bem e você.

    Cara existem muitas forma de se fazer isso. A que eu mais gosto é a seguinte (Obs: Valida se não for um arquivo muito grande como por exemplo umas 100.000).

    var
    Linhas, Colunas:TStringList;
    i,j:integer;
    begin
    Linhas := TStringList.Create;
    Colunas := TStringList.Create;
    try
    Linhas.LoadFromFile(‘C:\MeuArquivo.txt’); //Carregando arquivo
    for i := 0 to Pred(Linhas.Count) do
    begin
    {Transformando os dados das colunas em Linhas}
    Colunas.text := StringReplace(Linhas.Strings[i],’;’,#13,[rfReplaceAll]);
    for j := 0 to Pred(Colunas.Count) do
    begin
    { Aqui você faz alguma coisa como colocar num Edit
    No Meu caso aqui para exemplificar vou apenas mostrar num ShowMessage}
    ShowMessage(‘Valor “‘+Colunas.Strings[j] + ‘” da Linha ‘+IntTostr(i+1) +
    ‘ Coluna ‘+IntToStr(j+1));
    end;
    end;
    finally
    Linhas.Free;
    Colqunas.Free;
    end;
    end;

    Note que ai eu pego o valor de cada campo em cada linha. No seu exemplo ficaria na coluna 1 o valor é “Unidade”, na 2 é Contrato e assim por diante.

    Se o seu arquivo for maior que 100.000 linhas, aconselho que leia diretamente do disco, utilizar uma variavel do Tipo TextFile.

    Bom é isso, qualquer dúvida entre em contato.

  • Silvio Clécio

    Olá Cristiano,

    O ExtractStrings é excelente, por sinal falei sobre o mesmo na lista Delphi-BR; que chamou a atenção de programadores veteranos, no qual utilizavam um artifício genérico com TStringList.

    Parabéns pelo Blog!

    []’s
    Silvio Clécio

Deixe um comentário