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;
Nenhum comentário foi encontrado.