Adicionando campos de arquivo csv em componente do lazarus

Publicado por Almir Bispo dos Santos Filho em 11/09/2009

[ Hits: 6.321 ]

Blog: http://adltecnologia.blogspot.com.br

 


Adicionando campos de arquivo csv em componente do lazarus



Muitas vezes é necessário listar um campo que está no arquivo csv em um componente. Tenho alguns desenvolvimentos exclusivos em csv (sistemas de transação com tabelas e usando inclusive um tipo de SQL). Neste exemplo usaremos um combobox que será listado com os itens de um campo de um arquivo (tabela) *.csv.

Vamos ao exemplo:

Abra a ide do Lazarus.

Escolha o menu "Projeto" e crie uma nova aplicação.

No form que aparece, coloque um combobox (mude a propriedade nome para lista).

No diretório da sua máquina crie um arquivo csv chamado "clientes.csv".

Neste arquivo escreva, na primeira linha, três nomes de campos: Nome;Email;Endereco (separe-os por ponto e vírgula).

Adicione alguns dados em cada posição para testar nosso exemplo.

Na linha seguinte, escreva seu nome, seu email, seu endereço e de seus amigos. Ficaria mais ou menos isso:

Nome;Email;Endereco
Fulano;[email protected]_fulano;endereço_de_fulano
bertrano;[email protected]_bertrano;endereço_de_bertrano

No evento "onshow" do form, escreva o código abaixo:

procedure TForm1.FormShow(Sender: TObject);
var i:integer;
    rows,cont:tstringlist;
begin
{listar campo de csv em componente}
   //crie um stringlist para carregar arquivo.
cont:=tstringlist.create;
   //se existir tal arquivo ,carregue-o.
if fileexists(extractfilepath(application.exename)+'clientes.csv') THEN
cont.LoadFromFile(extractfilepath(application.exename)+'clientes.csv');
   //a partir da primeira linha (o nome do campo não será listado no componente).
   for i :=1 to cont.Count-1 do
   begin
   //dentro do laço for crie em memoria outro stringlist.
   rows:=tstringlist.create;
   //defina o delimitador (deve ser igual o delimitador do arquivo csv.No nosso caso é o "ponto e virgula").
   rows.Delimiter:=char(';');
   //todos os itens serão adicionado no arquivo "rows".
   rows.DelimitedText:=(cont.Strings[i]);
   //porém serão listados somente o campo "1" do arquivo (campo email do csv).
   lista.Items.add(rows.strings[1]);//pode mudar,lembrando que o primeiro index é o "0" (zero)
   lista.text:=lista.Items[0];//o primeiro item da lista aparece no texto do componente
   //libera o arquivo interno.
   rows.free;
   end;
//libera o arquivo que carregou o csv.
cont.free;
end;

Obs.: Ao escrever os dados eles não deverão conter espaços. Use "_" (underline).

Complemento da dica

Dica 2: Listando os nomes dos campos do csv em componente.

Adicione outro combobox ao nosso formulário (form).

Na propriedade nome, nomeie-o como "campos".

No evento onshow ainda (pode escrever após o primeiro bloco de código mostrado acima):

begin
//crie um stringlist para carregar arquivo.
cont:=tstringlist.create;
rows:=tstringlist.create;
//se existir tal arquivo ,carregue-o.
if fileexists(extractfilepath(application.exename)+'clientes.csv') THEN
cont.LoadFromFile(extractfilepath(application.exename)+'clientes.csv');
//defina o delimitador (deve ser igual o delimitador do arquivo csv.No nosso caso é o "ponto e virgula").
rows.Delimiter:=char(';');
//todos os itens serão adicionado no arquivo "rows".
rows.DelimitedText:=(cont.Strings[0]);//primeira linha do arquivo csv possui os nomes dos campos.
campos.Items.Text:=rows.text;//o componente campos (combobox) recebe os itens.
campos.Text:=rows.strings[0];//o texto do componente recebe o primeiro item da lista.
cont.free;
rows.free;
end;

Linux: Adicionando campos de arquivo csv em componente do lazarus
Outras dicas deste autor

Construindo gráfico com Canvas

Lazarus: Banco nativo usando sdfdataset com formato CSV

Leitura recomendada

Informix: Identificando / resolvendo um problema

Informix: Adicionando um chunk

Informix, administração básica

Lazarus: Banco nativo usando sdfdataset com formato CSV

Melhor escolha, melhor performance (banco de dados)

  

Comentários

Nenhum comentário foi encontrado.



Contribuir com comentário