Olá galera, nesta Quick Tips, irei mostrar como importar um determinado txt para dentro de um ClientDataSet, estou usando a base de dados do IBGE, que contém as cidades do Brasil, incluindo os estados, além do código da UF, e do código do IBGE. Este arquivo pode ser baixado no link, http://www.clubecobol.com.br/arquivos/indice.php, e o seu nome é Arquivo TXT de cidade IBGE e layout.
Com toda esta preocupação com relação a Nota Fiscal Eletrônica, onde temos que informar qual é o código do bairro, código da cidade, código da UF, definidos pelo IBGE, segue nesta Quick, um exemplo para importar um determinado Txt.
- 1 Memo
- 1 DbGrid
- 1 DataSorce
- 1 ClientDataSet(4 fields foram criados UF, CodigoIBGE, CodigoUF, Cidade)
- 1 BitBtn
Vamos desenvolver a tela para fazer o exemplo.
Adicione :
Observe que eu vou gravar este dados em uma base XML, e não em um Banco de Dados, mas como estou usando o ClientDataSet, basta você apontar ele para sua tabela, e ao final da importação executar o comando ApplyUpdates do mesmo.
Figura 1. Layout da aplicação.
Vocês podem observar que o arquivo do IBEG tem um padrão e um layout.
Listagem 1: Veja o layout:
UF PIC X(02).
COD-IBGE PIC 9(05).
COD-UF PIC 9(02).
CIDADE PIC X(20).
Listagem 2: Veja exemplo do arquivo :
AC0001312ACRELANDIA
AC0005412ASSIS BRASIL
AC0010412BRASILEIA
AC0013812BUJARI
AC0017912CAPIXABA
AC0020312CRUZEIRO DO SUL
AC0025212EPITACIOLANDIA
AC0030212FEIJO
AC0032812JORDAO
AC0033612MONCIO LIMA
AC0034412MANOEL URBANO
AC0035112MARECHAL THAUMATURGO
AC0038512PLACIDO DE CASTRO
AC0039312PORTO WALTER
AC0040112RIO BRANCO
AC0042712RODRIGUES ALVES
AC0043512SANTA ROSA DO PURUS
AC0045012SENADOR GUIOMARD
AC0050012SENA MADUREIRA
AC0060912TARAUACA
AC0070812XAPURI
AC0080712PORTO ACRE
AL0010227AGUA BRANCA
AL0020127ANADIA
Listagem 3: Implementação no clique do botão
procedure TForm1.BtnImportarClick(Sender: TObject);
var
I: Integer;
begin
{Veja oLayout do arquivo
UF PIC X(02).
COD-IBGE PIC 9(05).
COD-UF PIC 9(02).
CIDADE PIC X(20).
Observe que os tamanhos são fixos, tirando a cidade que pode
variar de 1 até 20 caracteres
}
//Carregamos o arquivo em um Memo
Memo1.Lines.LoadFromFile('ListaCidade_IBGE.txt');
for I := 0 to Pred(Memo1.Lines.Count) do
begin
//Preparamos a tabela para inclusão
CDS.Insert;
//Usando a função Copy, pegamos a posição 1 e copiamos 2 caracteres
CDSUF.AsString := Copy(Memo1.Lines.Strings[I],1,2);
//Usando a função Copy, pegamos a posição 3 e copiamos 5 caracteres
CDSCodigoIBGE.AsString := Copy(Memo1.Lines.Strings[I],3,5);
//Usando a função Copy, pegamos a posição 6 e copiamos 2 caracteres
CDSCodigoUF.AsString := Copy(Memo1.Lines.Strings[I],6,2);
//Usando a função Copy, pegamos a posição 10 e copiamos até o final da string
CDSCidade.AsString := Copy(Memo1.Lines.Strings[I],10,Length(Memo1.Lines.Strings[I]));
//Gravamos o registro
CDS.Post;
{Serve para atualizar o form toda vez que for incluido um registro,
atualizando assim a grid}
Application.ProcessMessages;
end;
end;
Ao executarmos nossa aplicação poderemos notar que o resultado foi o seguinte :
Figura 2. Importação Concluída.
Fico por aqui ate à próxima Quick Tips.
Um abraço
Wesley Y