Importar txt para bd com delimitador como se faz?
13| 44| 2| | |55712442080 |20/04/2004|11:20:53| 0:00:59|01| 0|000|00| 129|03|0|0|00|011E|9999|34691105|TSSANTAN
13| 45| 15| | |55713318491 |20/04/2004|11:21:14| 0:00:39|01| 0|000|00| 129|03|0|0|00|011E|9999|34691108|GFSILVA
13| 35| 16| | |55713461575 |20/04/2004|11:21:44| 0:00:17|01| 0|000|00| 129|03|0|0|00|011E|9999|34691101|SCHOSTIN
13| 9| 3| | |55412727952 |20/04/2004|11:21:32| 0:00:36|01| 0|000|00| 129|03|0|0|00|011E|9999|35633665|DCSANTOS
O arquivo está este formato !!!!
Preciso criar uma função que consigar carregar o arquivo para o banco!!
Alguem tem alguma idéia de como se faz?
13| 45| 15| | |55713318491 |20/04/2004|11:21:14| 0:00:39|01| 0|000|00| 129|03|0|0|00|011E|9999|34691108|GFSILVA
13| 35| 16| | |55713461575 |20/04/2004|11:21:44| 0:00:17|01| 0|000|00| 129|03|0|0|00|011E|9999|34691101|SCHOSTIN
13| 9| 3| | |55412727952 |20/04/2004|11:21:32| 0:00:36|01| 0|000|00| 129|03|0|0|00|011E|9999|35633665|DCSANTOS
O arquivo está este formato !!!!
Preciso criar uma função que consigar carregar o arquivo para o banco!!
Alguem tem alguma idéia de como se faz?
Genial_reis
Curtidas 0
Melhor post
Gandalf.nho
22/04/2004
Se usa algum tipo de delimitador, tente esse componente FREE, o PgCSV.
[url]http://www.khash.biz/[/url]
[url]http://www.khash.biz/[/url]
GOSTEI 1
Mais Respostas
Aroldo Zanela
20/04/2004
Colega,
Nas versões mais novas do Delphi (a partir do Delphi 6 - eu acho) você pode utilizar as propriedades e métodos da classe TStringList. No entando, fiz uma pequena rotina para ´explodir´ cada linha (registro) em várias linhas (cada campo numa linha), independente da versão do Delphi.
Tente reproduzir o teste em seu micro. Note que o arquivo testo deve ficar no diretório tempo com o nome TESTE.TXT, ou então, melhorar/alterar o código.
Se ficar alguma dúvida, pode postar aqui:
Nas versões mais novas do Delphi (a partir do Delphi 6 - eu acho) você pode utilizar as propriedades e métodos da classe TStringList. No entando, fiz uma pequena rotina para ´explodir´ cada linha (registro) em várias linhas (cada campo numa linha), independente da versão do Delphi.
Tente reproduzir o teste em seu micro. Note que o arquivo testo deve ficar no diretório tempo com o nome TESTE.TXT, ou então, melhorar/alterar o código.
Se ficar alguma dúvida, pode postar aqui:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
// Classe para tratar o arquivo
TImportarTexto = Class
LinhaEntrada: String;
Delimitador: Char;
Registro: TStringList;
Constructor Create;
Destructor Destroy;
Procedure Clear;
Procedure Execute;
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
{ TImportarTexto }
procedure TImportarTexto.Clear;
begin
LinhaEntrada := ´´;
Delimitador := ´|´; // Não utilizado
end;
constructor TImportarTexto.Create;
begin
Inherited Create;
Registro := TStringList.Create;
end;
destructor TImportarTexto.Destroy;
begin
Inherited Destroy;
end;
procedure TImportarTexto.Execute;
var nPos: Integer;
begin
Registro.Clear;
nPos := 1;
while (nPos > 0) do
begin
nPos := Pos(´|´, LinhaEntrada);
if nPos>0 then
begin
Registro.Add(Copy(LinhaEntrada,1,nPos-1));
LinhaEntrada := Copy(LinhaEntrada,nPos+1,Length(LinhaEntrada)-nPos);
end;
end;
Registro.Add(LinhaEntrada);
end;
procedure TForm1.Button1Click(Sender: TObject);
var Importa: TImportarTexto;
Arquivo: TStringList;
nI, nX: Integer;
begin
Arquivo:= TStringList.Create;
Arquivo.LoadFromFile(´c:\temp\teste.txt´);
Importa := TImportarTexto.Create;
nX := Arquivo.Count - 1;
For nI := 0 to nX do
begin
Importa.LinhaEntrada:= Arquivo.Strings[nI];
Importa.Execute;
ShowMessage(Importa.Registro.Text); // Mostra a linha formatada em campos/linhas
end;
Importa.Free;
Arquivo.Free;
end;
end.GOSTEI 0
Paulo Borges
20/04/2004
Muito bom deu certinho , Parabens
GOSTEI 0
Victor Lima
20/04/2004
Muito legal a solução :)=
GOSTEI 0
Roberto Wutke
20/04/2004
13| 44| 2| | |55712442080 |20/04/2004|11:20:53| 0:00:59|01| 0|000|00| 129|03|0|0|00|011E|9999|34691105|TSSANTAN
13| 45| 15| | |55713318491 |20/04/2004|11:21:14| 0:00:39|01| 0|000|00| 129|03|0|0|00|011E|9999|34691108|GFSILVA
13| 35| 16| | |55713461575 |20/04/2004|11:21:44| 0:00:17|01| 0|000|00| 129|03|0|0|00|011E|9999|34691101|SCHOSTIN
13| 9| 3| | |55412727952 |20/04/2004|11:21:32| 0:00:36|01| 0|000|00| 129|03|0|0|00|011E|9999|35633665|DCSANTOS
O arquivo está este formato !!!!
Preciso criar uma função que consigar carregar o arquivo para o banco!!
Alguem tem alguma idéia de como se faz?
13| 45| 15| | |55713318491 |20/04/2004|11:21:14| 0:00:39|01| 0|000|00| 129|03|0|0|00|011E|9999|34691108|GFSILVA
13| 35| 16| | |55713461575 |20/04/2004|11:21:44| 0:00:17|01| 0|000|00| 129|03|0|0|00|011E|9999|34691101|SCHOSTIN
13| 9| 3| | |55412727952 |20/04/2004|11:21:32| 0:00:36|01| 0|000|00| 129|03|0|0|00|011E|9999|35633665|DCSANTOS
O arquivo está este formato !!!!
Preciso criar uma função que consigar carregar o arquivo para o banco!!
Alguem tem alguma idéia de como se faz?
Bom dia amigo, vc tbm pode usar a função do delphi SplitString, que te retorna um array com as informações obtidas, aonde vc passa a sua string e o delimitador dela ( no seu caso pipe) ficaria assim.
O formato seria tipo esse: SplitString(Linha, '','' );
string delimitador
begin
Result := False;
// Fazendo as aberturas do arquivo txt
Arq_Txt := edt_local_arquivo.Text;
AssignFile( Arquivo_ret , Arq_Txt );
Reset ( Arquivo_ret );
Readln( Arquivo_ret , Linha );
while not Eof(Arquivo_ret)
do begin
Readln( Arquivo_ret , Linha );
LinhaQuebrada := SplitString(Linha, '','');
//Apos fazer os Split da linha, eu tenho as minhas posições que quero usar... veja abaixo que podemos converter para o tipo de dado que quisermos, de acordo com o campo do banco.
Query.Insert;
Query.FieldByName(''nro_filiacao'' ).AsInteger := StrToInt( Trim( LinhaQuebrada[ 1]) );
Query.FieldByName(''nro_resumo_venda'' ).AsInteger := StrToInt( Trim( LinhaQuebrada[ 2]) );
Query.FieldByName(''dat_comprovante_venda'').AsString := Trim( LinhaQuebrada[ 3]);
Query.FieldByName(''vlr_bruto'' ).AsFloat := LinhaQuebrada[ 4].ToDouble() / 100;
Query.FieldByName(''vlr_desconto'' ).AsFloat := LinhaQuebrada[ 5].ToDouble() / 100;
Query.FieldByName(''vlr_liquido'' ).AsFloat := LinhaQuebrada[ 6].ToDouble() / 100;
Query.FieldByName(''nro_cartao'' ).AsString := LinhaQuebrada[ 7];
Query.FieldByName(''tip_transacao'' ).AsString := LinhaQuebrada[ 8];
Query.Post;
// Fim While
end;
Result := True;
end;
A dica que foi dada acima também eé muito boa, mas essa pode te ajudar a economizar linhas de código.
Qualquer dúvida do SplitString segue um link com mais detalhes.. http://www.clipatecinformatica.com.br/2014/09/usando-funcao-splitstring-do-delphi.html
Bons códigos a todos
GOSTEI 0