Adicionando campos de arquivo csv em componente do lazarus

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

[ Hits: 7.675 ]

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@de_fulano;endereço_de_fulano
bertrano;email@de_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

Lazarus: Banco nativo usando sdfdataset com formato CSV

Construindo gráfico com Canvas

Leitura recomendada

Informix: Identificando / resolvendo um problema

Contador de linhas em consultas SQL

Fazendo backup no OpenLDAP

Como criar domínio no WebLogic

Lazarus: Banco nativo usando sdfdataset com formato CSV

  

Comentários

Nenhum comentário foi encontrado.



Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts