Usando Separador no Listbox - Delphi

Veja neste artigo como separar os dados encontrados em um Listbox usando um determinado delimitador.

Olá pessoal, vamos a um artigo muito interessante onde temos o objetivo de separar os dados encontrados em um Listbox usando um determinado delimitador.

Para construção deste exemplo, vamos precisar ter em uma aplicação em Delphi e nela adicionar 1 TListBox, 1 TButton e 1 TStringGrid.


Figura 1. Layout do Formulário.

Objetivo é no Listbox carregar um arquivo .txt(poderíamos usar um TStringList para isso). Segundo ponto é ao clicar no Button as informações serem separadas num TStringGrid.

Consideração: Vou fazer de forma bem básica para que todos possam desfrutar da explicação, vou usar variáveis locais, mas não há necessidade disso, ok ?

Vou usar um layout de txt (basta você copiar e colocar o conteúdo abaixo na propriedade Items do TListBox) da seguinte forma:

20:05|segunda-Feira|E:\Arq.rar 17:22|terça-Feira|C:\Arquivos de progrmas\App2.exe 10:10|quarta-Feira|E:\Arq.txt 13:30|quinta-Feira|C:\windows\App3.exe

Podemos notar que temos um char que separa os "fields" em cada linha, no caso seria o "|". Sendo assim, precisamos separar em linhas e colunas os dados de cada Item do TListBox.

Neste ponto já temos o layout montado e texto a ser separado no nosso TListbox, vamos agora então a implementação e explicação do Código.

No evento onClick do TButton vamos implementar o seguinte código:

procedure TFrmPrincipal.Button1Click(Sender: TObject); var Dados : TStringList; {Foi criada uma StringList para auxiliar na separação dos dados} i : Integer; {Esta variável serve para controlar o nosso LOOP e definir qual será a linha onde iremos "escrever" o conteúdo no TStringGrid.} Hora, Dia, Diretorio : String; {Observe que foram criadas 3 variáveis para armazenar os dados "Temporariamente" em memória} begin {Estou instanciando o nosso TStringList, pois caso não seja feito teremos um erro muito comum, ACCESS VIOLATION} Dados := TStringList.Create; {Nestas linhas abaixo preparo o "Cabeçalho" da nossa Tabela} StringGrid1.Cells[0,0] := 'Hora'; StringGrid1.Cells[1,0] := 'Dia'; StringGrid1.Cells[2,0] := 'Diretorio'; {Chamos ao momento "mais" complexo do nosso artigo, onde vamos ter que fazer um Loop para poder varrer todo o TListBox e separar os dados em questão} for I := 0 to ListBox1.Items.Count - 1 do begin {Logo abaixo você pode notar que uso propriedades bem simples mas de suma importancia, veja ao final do artigo a explicação para cada uma delas} Dados.Delimiter := '|'; Dados.QuoteChar := ' '; Dados.StrictDelimiter := True; {Aqui esta o "macete" do artigo, onde o TStringList irá receber apenas a linha que esta dentro do Loop, 0,1,2 e assim por diante} Dados.DelimitedText := ListBox1.Items.Strings[I]; {Neste momento estou fazendo uma coisa bem básica, pegando os dados separados e armazenando nas variáveis} Hora := Dados[0]; Dia := Dados[1]; Diretorio := Dados[2]; {Logo em seguida, vem o objetivo final do artigo, que é ilustrar os dados separados em cada linha e coluna do nosso TStringGrid. Observe que estou usando I+1, pois o nosso Loop começa com 0, mas esta linha definimos no começo do código para ser usada para o Cabeçalho. Atenção nisso!!!} StringGrid1.Cells[0,I+1] := Hora; StringGrid1.Cells[1,I+1] := Dia; StringGrid1.Cells[2,I+1] := Diretorio; end; {Aqui abaixo eu usei um TMemo para quem quiser pegar um arquivo um pouco maior com mais "Colunas", o nosso tem apenas 3, "Colunas [Hora, Dia, Diretorio]". Este código pode ser ignorado sem problemas algum observe que o mesmo esta comentado, quem quiser utilizar não esqueça de : Adicionar um TMemo e também declarar a variável J, ok ? } { for J := 0 to Dados.Count-1 do begin Memo1.Lines.Add (Dados[J]); end; Memo1.Lines.Add ('====================='); end; } {Esta linha tem que ser mantida para poder liberar o Objeto Dados, criado no começo do Código.} Dados.Free; end;

Vamos as explicações técnicas sobre alguns itens mencionados no código acima.

Veja o resultado.


Figura 2. Formulário Funcionando.

Bom com isso finalizo este artigo, qualquer dúvida basta comentar no código.

Quem quiser enviar temas para novos artigos basta comentar em qualquer post ou então me enviar um e-mail direto.

Um abraço a todos!!!!

Ebook exclusivo
Dê um upgrade no início da sua jornada. Crie sua conta grátis e baixe o e-book

Artigos relacionados