Importar txt para db

03/11/2009

0

Eu tenho um arquivo de txt com o seguinte corpo:   codigo  Descrição     Quantidade 50855  Produto 1           100 56125  Produto 2           70             65214  Produto 3           60 .......   Como que eu importo esse texto para o meu banco de dados firebird?   Desde já agradeço.
Francisco Assis

Francisco Assis

Responder

Posts

03/11/2009

Pjrm1470

Dessa forma acho dificil de se fazer a importação.
Normalmente se tem um delimitador para separar cada campo.
Se o corpo do arquivo estivesse assim:
| Codigo;Descricao;Quantidade;
| 50855;Produto 1;100; | 56125;Produto 2;70;             | 65214;Produto 3;60;

O delimitador é " ; " (Ponto e virgula).
Sendo assim em cada linha vc pega cada caractere e vai formando a palavra. Chegou no delimitador, para ai e joga o valor a seu respectivo campo e pula para o proximo campo.

No seu caso terá que fazer uma verificação de espaços bem calculados.
Como se você tivesse que criar uma tabela imaginaria separando os campos e seus valores estão centralizados na tabela.

Alguns "Bancos" usam essa formatação nos arquivos txt para enviar informações.

Talvez eu n tenha ajudado, mas com isso vc terá uma noção de como podera resolver o problema.

Att,
Plínio.
Responder

03/11/2009

Francisco Assis

Plínio, obrigado. Você teria algum exemplo de calcular os espaços?
Responder

04/11/2009

Pjrm1470

No seu caso não terá uma lógica dinâmica de acordo com cada arquivo, pois não sei dizer se vc tem vários arquivos com formatos diferente. Neste seu caso:

| codigo  Descrição     Quantidade | 50855  Produto 1           100 | 56125  Produto 2           70             | 65214  Produto 3           60
Pensei assim:
| procedure TForm1.Button4Click(Sender: TObject);
| var
|   tx: TextFile;
|   st: String;
|   I, C: Integer; // C = Campo
| begin
|   AssignFile(tx, 'C:\arquivo.txt'); //le o arquivo
|   Reset(tx);
|   while not Eof(tx) do
|   begin
|     Readln(tx, st); //Joga a linha atual para a string
|     C := 1;
|     for I := 1 to Length(st) do //varre cada caractere da linha
|     begin
|       Campo[C] := Campo[C] + st[I];
|       if (I = 6) or (I = 18) then //Nas posições aonde penso ser o final do campo
|         Inc(C); //pula para o proximo campo
|     end;
|   end;
|   CloseFile(tx);
| end;
Legenda:
Campo[]: array[1..X] of String; //onde X é o numero de campos que tem. neste caso 3.

Lembre-se de que se tiver outros arquivos com formatações e espaços diferentes, você terá que fazer um codigo para cada um, pois não uma forma dinamica de se fazer isso sem ter um delimitador para dizer quando haverá a separação dos campos.

Espero que lhe ajude o exemplo.
Qlqr coisa so pergunta.

Att,
Plínio.
Responder

04/11/2009

Pjrm1470

"...Não terá uma lógica dinamica..."
Corrigindo, não há botão editar. poderia habilita-lo por 30-60s apos o post.
Responder

Que tal ter acesso a um e-book gratuito que vai te ajudar muito nesse momento decisivo?

Ver ebook

Recomendado pra quem ainda não iniciou o estudos.

Eu quero
Ver ebook

Recomendado para quem está passando por dificuldades nessa etapa inicial

Eu quero

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar