Importar TXT com ponto e virgula
Gostaria de saber se entre os colegas, alguem ja importou um txt separado por ponto e virgulas, ou seja:
0001 ;Antônio Carlos da Silva ;02/12/1974 ;895623124-54 ;
0002 ;Maria José Pereira ;05/11/1954 ;789456123-00 ;
.
.
.
Com os campos concatenados seria mais fácil, mas com o ponto e virgula está meio complicado, gostaria que alguem me ajudasse, pois preciso disso urgente.
Atenciosamente,
Andre Luis - Leitbom
0001 ;Antônio Carlos da Silva ;02/12/1974 ;895623124-54 ;
0002 ;Maria José Pereira ;05/11/1954 ;789456123-00 ;
.
.
.
Com os campos concatenados seria mais fácil, mas com o ponto e virgula está meio complicado, gostaria que alguem me ajudasse, pois preciso disso urgente.
Atenciosamente,
Andre Luis - Leitbom
Andre Silveira
Curtidas 0
Respostas
Osocram
18/10/2004
vc pod usar a func ´pos´ ele retorna a posicao d uma substring em uma string. se trazer 0 ou -1 non lembro bem.. enton no achou...
no ex:
aux := 0001 ;Antônio Carlos da Silva ;02/12/1974 ;895623124-54 ;
vc faria um proc ou function q pega a primeira SubString
por ex
if pos(aux,´;´)>0 then
resultado := copy(aux,1,pos(aux,´;´) //aqui vc copia sua string (non lembro a sintaxe.... pois estou sem o delphi agora p testar)
resto := copy(aux,pos(aux,´;´)+1,Lenght(aux) //aqui vc o q restou da string... dae eh so mandar dnovo na func ateh acabar ela.... pod fazer um func recursiva e talz...
acho q isso...
no ex:
aux := 0001 ;Antônio Carlos da Silva ;02/12/1974 ;895623124-54 ;
vc faria um proc ou function q pega a primeira SubString
por ex
if pos(aux,´;´)>0 then
resultado := copy(aux,1,pos(aux,´;´) //aqui vc copia sua string (non lembro a sintaxe.... pois estou sem o delphi agora p testar)
resto := copy(aux,pos(aux,´;´)+1,Lenght(aux) //aqui vc o q restou da string... dae eh so mandar dnovo na func ateh acabar ela.... pod fazer um func recursiva e talz...
acho q isso...
GOSTEI 0
Aroldo Zanela
18/10/2004
[quote:01a41e4f9c=´Andre Silveira´]Gostaria de saber se entre os colegas, alguem ja importou um txt separado por ponto e virgulas, ou seja:
0001 ;Antônio Carlos da Silva ;02/12/1974 ;895623124-54 ;
0002 ;Maria José Pereira ;05/11/1954 ;789456123-00 ;
.
.
.
Com os campos concatenados seria mais fácil, mas com o ponto e virgula está meio complicado, gostaria que alguem me ajudasse, pois preciso disso urgente.
Atenciosamente,
Andre Luis - Leitbom[/quote:01a41e4f9c]
Colega,
A partir da versão Delphi 6 é mais fácil ainda, mesmo assim, veja o detalhamento nesta thread. http://delphiforum.icft.com.br/forum/viewtopic.php?t=43243&highlight=explode
0001 ;Antônio Carlos da Silva ;02/12/1974 ;895623124-54 ;
0002 ;Maria José Pereira ;05/11/1954 ;789456123-00 ;
.
.
.
Com os campos concatenados seria mais fácil, mas com o ponto e virgula está meio complicado, gostaria que alguem me ajudasse, pois preciso disso urgente.
Atenciosamente,
Andre Luis - Leitbom[/quote:01a41e4f9c]
Colega,
A partir da versão Delphi 6 é mais fácil ainda, mesmo assim, veja o detalhamento nesta thread. http://delphiforum.icft.com.br/forum/viewtopic.php?t=43243&highlight=explode
GOSTEI 0
Rjun
18/10/2004
Utilize ADO. Adicione um TADOCONNECTION e um TADOTABLE no seu form. Configure o ConnectionString do TADOCONNECTION com o provedor OLE DB para Jet 4.0. Na aba TODAS coloque Text para a propriedade EXtended Properties. Na aba CONEXAO coloque o diretorio em que se encontra o arquivo texto. Agora no TADOTABLE, selecione na propriedade TABLE o nome do arquivo. Pronto, agora é so inserir os campos do seu arquivo texto. Pra voce ter uma boa visao, coloque um DBGRID e um TDATASOURCE ligando ao TADOTABLE.
GOSTEI 0
Ilanocf
18/10/2004
Fiz isso utilizando tabelas MySQL:
Espero ter ajudado.
[color=red:b19750ac30][b:b19750ac30]EXPORTAR DADOS[/b:b19750ac30][/color:b19750ac30]
Coloque 4 componentes:
1) OpenDialog1: Altere as propriedades: DefaultExt: TXT e Filter: Arquivo Texto|*.TXT;
2) SaveDialog1: Altere as propriedades: DefaultExt: TXT e Filter: Arquivo Texto|*.TXT;
3) Tabelas;
4) Botão e renomeie-o para ButExporta, e em seu evento OnClique o código abaixo, alterando apenas os nomes das tabelas e seus respectivos campos.
procedure TForm1.ButExportaClick(Sender: TObject);
var
Arq: TextFile;
begin
if SaveDialog1.Execute then
begin
Screen.Cursor := crHourGlass;
with Table1 do
begin
Open;
First;
if not EOF then
begin
AssignFile(Arq, SaveDialog1.FileName);
ReWrite(Arq);
repeat
WriteLn(Arq,FieldByName(´EmpNo´).AsString + ´|´ +
FieldByName(´LastName´).AsString + ´|´ +
FieldByName(´FirstName´).AsString + ´|´ +
FieldByName(´PhoneExt´).AsString + ´|´ +
FieldByName(´HireDate´).AsString + ´|´ +
FieldByName(´Salary´).AsString + ´*´);
next;
until EOF;
CloseFile(Arq);
end;
close;
end;
Screen.Cursor := crDefault;
end;
end;
[color=red:b19750ac30][b:b19750ac30]IMPORTAR DADOS[/b:b19750ac30][/color:b19750ac30]
Coloque 4 componentes:
1) OpenDialog1: Altere as propriedades: DefaultExt: TXT e Filter: Arquivo Texto|*.TXT;
2) SaveDialog1: Altere as propriedades: DefaultExt: TXT e Filter: Arquivo Texto|*.TXT;
3) Tabelas;
4) Botão e renomeie-o para ButImporta, e em seu evento OnClique o código abaixo, alterando apenas os nomes das tabelas e seus respectivos campos
procedure TForm1.ButImportaClick(Sender: TObject);
var
Arq: TextFile;
Texto: String;
I: Integer;
function MontaVariavel: String;
var
monta: String;
begin
monta := ´´;
inc(I);
while Texto[I] <> ´*´ do
begin
if Texto[I] = ´|´ then
break;
monta := monta + Texto[I];
inc(I);
end;
result := monta;
end;
begin
if OpenDialog1.Execute then
begin
Screen.Cursor := crHourGlass;
Table1.Open;
AssignFile(Arq, OpenDialog1.FileName);
Reset(Arq);
if not EOF(Arq) then
repeat
ReadLn(Arq,Texto);
with Table1 do
begin
Insert;
i := 0;
FieldByName(´EmpNo´).AsString := MontaVariavel;
FieldByName(´LastName´).AsString := MontaVariavel;
FieldByName(´FirstName´).AsString := MontaVariavel;
FieldByName(´PhoneExt´).AsString := MontaVariavel;
FieldByName(´HireDate´).AsString := MontaVariavel;
FieldByName(´Salary´).AsString := MontaVariavel;
Post;
end;
until EOF(Arq);
CloseFile(Arq);
Table1.Close;
Screen.Cursor := crDefault;
end;
end;
Espero ter ajudado.
GOSTEI 0
Vagner.oliveira
18/10/2004
amigo, o código para importar os dados da o seguinte erro:
[b:b640a9abb2]Acces Violation at adress 004AB571 in module ´project1.exe´ read of adress FFFFFFFF [/b:b640a9abb2]
o erro ocorre na seguinte linha:
[b:b640a9abb2]while Texto[I] <> ´*´ do[/b:b640a9abb2]
a dica é boa, não consegui identificar o erro
[b:b640a9abb2]Acces Violation at adress 004AB571 in module ´project1.exe´ read of adress FFFFFFFF [/b:b640a9abb2]
o erro ocorre na seguinte linha:
[b:b640a9abb2]while Texto[I] <> ´*´ do[/b:b640a9abb2]
a dica é boa, não consegui identificar o erro
GOSTEI 0
Marco Salles
18/10/2004
[b:b56af73711]amigo tente isso , talves le sirva[/b:b56af73711]
[code]procedure TForm1.Button1Click(Sender: TObject); var TXT : TextFile; Entrada: String; I : Integer; j:Integer; Tamanho:Integer; Begin AssignFile(TXT,´C:\TEXTO\Texto\Texto.TXT´); // Diretorio onde se encontra o arquivo .TXT Reset(TXT); While not Eof(TXT) do Begin ReadLn(TXT,Entrada); //Variável que vai receber linha a linha as informações do arquivo TXT Table1.Insert; tamanho:=Length(entrada); j:=1; i:=Pos(´;´,entrada); Table1Numero.Value:=Copy(Entrada,j,i-j);//Codigo; J:=J+i; i:=Pos(´;´,copy(entrada,j,Tamanho)); Table1Nome.Value:=Copy(Entrada,j,i-1);//nome; j:=j+i; i:=Pos(´;´,copy(entrada,j,Tamanho)); Table1DataNasc.Value:=StrToDate(Copy(Entrada,j,i-1));//Data; j:=j+i; Table1UF.Value:= Copy(Entrada,j,tamanho-1);//cpf; Table1.Post; End; CloseFile(TXT); end;[/code]
GOSTEI 0
Vagner.oliveira
18/10/2004
da erro ao compilar:
undeclared identifier: ´Value´ na linha
Table1.Value:=Copy(Entrada,j,i-1);//nome; e todas que possui o item Value
undeclared identifier: ´Value´ na linha
Table1.Value:=Copy(Entrada,j,i-1);//nome; e todas que possui o item Value
GOSTEI 0
Marco Salles
18/10/2004
da erro ao compilar:
undeclared identifier: ´Value´ na linha
Table1.Value:=Copy(Entrada,j,i-1);//nome; e todas que possui o item Value
Aqui eu te dei uma idéia de como usar , utilizando um componente Table Eu não sei direito o que voce quer fazer com cada campo que voce esta lendo.. Voce deve armazenalo em algum lugar??? usei o table , foi como exemplo
GOSTEI 0
Vagner.oliveira
18/10/2004
tenho um arquivo TXT na seguinte forma:
e quero importá-lo para dentro de uma tabela, o comando para exportar informado acima funciona beleza, só da erro ao tentar importar.
nome ; endereço ; telefone ; telcel ; nome ; endereço ; telefone ; telcel ; nome ; endereço ; telefone ; telcel ;
e quero importá-lo para dentro de uma tabela, o comando para exportar informado acima funciona beleza, só da erro ao tentar importar.
GOSTEI 0
Marco Salles
18/10/2004
tenho um arquivo TXT na seguinte forma:
Código:
nome ; endereço ; telefone ; telcel ;
nome ; endereço ; telefone ; telcel ;
nome ; endereço ; telefone ; telcel ;
:arrow: Amigo rode o exemplo e informe o que ira ocorrer
procedure TForm1.Button1Click(Sender: TObject); var TXT : TextFile; Entrada: String; I : Integer; j:Integer; Tamanho:Integer; Begin AssignFile(TXT,´C:\TEXTO\Texto\Texto.TXT´); // Diretorio onde se encontra o arquivo .TXT Reset(TXT); While not Eof(TXT) do Begin ReadLn(TXT,Entrada); //Variável que vai receber linha a linha as informações do arquivo TXT //Table1.Insert; tamanho:=Length(entrada); j:=1; i:=Pos(´;´,entrada); // Table1Numero.Value:=Copy(Entrada,j,i-j);//Codigo; Showmessage(´Codigo : ´+Copy(Entrada,j,i-j));//Codigo; J:=J+i; i:=Pos(´;´,copy(entrada,j,Tamanho)); // Table1Nome.Value:=Copy(Entrada,j,i-1);//nome; Showmessage(´Nome : ´+Copy(Entrada,j,i-j));// nome; j:=j+i; i:=Pos(´;´,copy(entrada,j,Tamanho)); // Table1DataNasc.Value:=StrToDate(Copy(Entrada,j,i-1));//Data; Showmessage(´Telefone : ´+Copy(Entrada,j,i-j);//Telefone; j:=j+i; // Table1UF.Value:= Copy(Entrada,j,tamanho-1);//Telcel; showmessage(´ Tel celular ´+Copy(Entrada,j,tamanho-1));// tel celular // Table1.Post; End; CloseFile(TXT); end;
alem disso amigo , se o codigo leu direitinho o seu arquivo txt , separado por virgula, importa-lo para um tabela de um banco é um outro passo.
Voce deve informar qual o banco que voce usa , se a Estrutura dessa tabela nesse banco ja foi criada e é a mesma ta estrutrura do arquivo Txt e qual o componente de acesso que voce pretende usar
entendeu :?: :?: :?:
GOSTEI 0
Vagner.oliveira
18/10/2004
:shock: Amigo, seu código ta fionando, mas tem aguns erros a serem corrigidos, como não entendo muito de Delphi, peço que descreva o que cada linha do código faz, para que possa entender o código e corrigir :)
GOSTEI 0
Vagner.oliveira
18/10/2004
está dando erro na linha
minha tabela é em Paradox:
[b:f9b4e62f56]
Indice: Autoincremento
Nome: Alpha
Endereço: Alpha
Telefone: Alpha
TelCel: Alpha
Orçamento: Memo
Histórico: Memo
[/b:f9b4e62f56]
Table1.Value:=Copy(Entrada,j,i-j);
minha tabela é em Paradox:
[b:f9b4e62f56]
Indice: Autoincremento
Nome: Alpha
Endereço: Alpha
Telefone: Alpha
TelCel: Alpha
Orçamento: Memo
Histórico: Memo
[/b:f9b4e62f56]
GOSTEI 0
Marco Salles
18/10/2004
Amigo, seu código ta fionando, mas tem aguns erros a serem corrigidos, como não entendo muito de Delphi, peço que descreva o que cada linha do código faz, para que possa entender o código e corrigir
minha tabela é em Paradox:
Indice: Autoincremento
Nome: Alpha
Endereço: Alpha
Telefone: Alpha
TelCel: Alpha
Orçamento: Memo
Histórico: Memo
Voce deve inseriri um componente Table no seu aplicativo e usar a Sintaxi abaixo
está dando erro na linha Código:
Table1.Value:=Copy(Entrada,j,i-j);
Ao inves disso , voce deve substituir pela seguinte instrução:
Table1.FieldByName(´NomeDoCampoConformeEstaEscritoNaTabela´).AsSTring:=Copy(Entrada,j,i-j);
Entendeu Beleza :?: :?: :?:
GOSTEI 0
Vagner.oliveira
18/10/2004
:shock: :shock:
eu não consigo entender nessa linha os itens:
[b:d73c3652fd]
Entrada:String;
I:Integer;
j:Integer;
Tamanho:Integer;
[/b:d73c3652fd]
o que que faz os itens [b:d73c3652fd]entrada, tamanho, j, i [/b:d73c3652fd] :shock: :shock:
eu não consigo entender nessa linha os itens:
[b:d73c3652fd]
Entrada:String;
I:Integer;
j:Integer;
Tamanho:Integer;
[/b:d73c3652fd]
. . . tamanho:=Length(entrada); j:=1; i:=Pos(´;´,entrada); // Table1.FieldByName(´Nome´).Value:=Copy(Entrada,j,i-1); Showmessage(´Nome : ´+Copy(Entrada,j,i-j)); j:=j+i; i:=Pos(´;´,copy(entrada,j,Tamanho)); . . .
o que que faz os itens [b:d73c3652fd]entrada, tamanho, j, i [/b:d73c3652fd] :shock: :shock:
GOSTEI 0
Vagner.oliveira
18/10/2004
Pessoal já sei como posso fazer par importar os dados, apenas preciso saber como identificar o ponto e virgula (;) para que passe para o próximo campo da tabela...... :P :P :P
GOSTEI 0
Marco Salles
18/10/2004
Pessoal já sei como posso fazer par importar os dados
apenas preciso saber como identificar o ponto e virgula
para que passe para o próximo campo da tabela
é
GOSTEI 0
Vagner.oliveira
18/10/2004
sobe
GOSTEI 0
Igorcb
18/10/2004
o Seu arquivo texto tem que estar assim
Campo1;Campo2,Campo3;
Campo1;Campo2,Campo3;
Campo1;Campo2,Campo3;
Campo1;Campo2,Campo3;
no final de cadas linha tem que ter o ;
e tb não deixa mais nenhuma linha em branco no arquivo
repito comigo deu certo
Campo1;Campo2,Campo3;
Campo1;Campo2,Campo3;
Campo1;Campo2,Campo3;
Campo1;Campo2,Campo3;
no final de cadas linha tem que ter o ;
e tb não deixa mais nenhuma linha em branco no arquivo
repito comigo deu certo
GOSTEI 0
Aroldo Zanela
18/10/2004
[quote:c3bdd8806a=´Aroldo Zanela´][quote:c3bdd8806a=´Andre Silveira´]Gostaria de saber se entre os colegas, alguem ja importou um txt separado por ponto e virgulas, ou seja:
0001 ;Antônio Carlos da Silva ;02/12/1974 ;895623124-54 ;
0002 ;Maria José Pereira ;05/11/1954 ;789456123-00 ;
.
.
.
Com os campos concatenados seria mais fácil, mas com o ponto e virgula está meio complicado, gostaria que alguem me ajudasse, pois preciso disso urgente.
Atenciosamente,
Andre Luis - Leitbom[/quote:c3bdd8806a]
Colega,
A partir da versão Delphi 6 é mais fácil ainda, mesmo assim, veja o detalhamento nesta thread. http://delphiforum.icft.com.br/forum/viewtopic.php?t=43243&highlight=explode[/quote:c3bdd8806a]
Colegas,
Com a última mudança de URL, o link anterior está quebrado. Este é o correto: http://forum.clubedelphi.net/viewtopic.php?t=43243&highlight=explode
0001 ;Antônio Carlos da Silva ;02/12/1974 ;895623124-54 ;
0002 ;Maria José Pereira ;05/11/1954 ;789456123-00 ;
.
.
.
Com os campos concatenados seria mais fácil, mas com o ponto e virgula está meio complicado, gostaria que alguem me ajudasse, pois preciso disso urgente.
Atenciosamente,
Andre Luis - Leitbom[/quote:c3bdd8806a]
Colega,
A partir da versão Delphi 6 é mais fácil ainda, mesmo assim, veja o detalhamento nesta thread. http://delphiforum.icft.com.br/forum/viewtopic.php?t=43243&highlight=explode[/quote:c3bdd8806a]
Colegas,
Com a última mudança de URL, o link anterior está quebrado. Este é o correto: http://forum.clubedelphi.net/viewtopic.php?t=43243&highlight=explode
GOSTEI 0
Vagner.oliveira
18/10/2004
Pessoal consigo importar e exportar dados, mas está muito lento sendo que são só 130 registros. Minha tabela é em [b:f8f49da4e8]PARADOX[/b:f8f49da4e8] e uso os seguintes especificações:
[b:f8f49da4e8]
Indice - Autoincremento;
Nome, Endereco, Telefone, Telcel, Bairro - Alpha;
Orcamento, Historico, ConfPC - MEMO de 1mb
[/b:f8f49da4e8]
Estou usando o seguinte código para [b:f8f49da4e8]IMPORTAR os dados:[/b:f8f49da4e8]
E para [b:f8f49da4e8]EXPORTAR[/b:f8f49da4e8] os dados:
Só que trava, e as vezes ele faz a exportação/importação. Fiz um arquivo de teste que possui os itens na tabela em [b:f8f49da4e8]PARADOX:
Indice - Autoincremento;
Nome, Telefone, Telcel - Alpha;
Memo - MEMO de 2mb
[/b:f8f49da4e8]
Este funciona perfeitamente, sendo que o mesmo posui apenas 4 registros.
[size=14:f8f49da4e8][b:f8f49da4e8][color=green:f8f49da4e8] Gostaria de saber o que ocasiona o erro e a lentidão para importar, exportar a tabela ?[/color:f8f49da4e8][/b:f8f49da4e8][/size:f8f49da4e8]
[b:f8f49da4e8]
Indice - Autoincremento;
Nome, Endereco, Telefone, Telcel, Bairro - Alpha;
Orcamento, Historico, ConfPC - MEMO de 1mb
[/b:f8f49da4e8]
Estou usando o seguinte código para [b:f8f49da4e8]IMPORTAR os dados:[/b:f8f49da4e8]
procedure TF_principal.SBImportarClick(Sender: TObject); var t:textfile; s:string; begin if SaveDialog1.Execute then AssignFile( t , SaveDialog1.FileName); Reset(t); while not eof( t ) do begin readln(t,s); table1.insert; table1.fieldbyname(´Nome´).AsString := copy( s , 1 , pos(´;´,s)-1 ); s:=copy(s,pos(´;´,s)+1, length(s) ); table1.fieldbyname(´Endereco´).AsString := copy( s , 1 , pos(´;´,s)-1 ); s:=copy(s,pos(´;´,s)+1, length(s) ); table1.fieldbyname(´Bairro´).AsString := copy( s , 1 , pos(´;´,s)-1 ); s:=copy(s,pos(´;´,s)+1, length(s) ); table1.fieldbyname(´Telefone´).AsString := copy( s , 1 , pos(´;´,s)-1 ); s:=copy(s,pos(´;´,s)+1, length(s) ); table1.fieldbyname(´TelCel´).AsString := copy( s , 1 , pos(´;´,s)-1 ); s:=copy(s,pos(´;´,s)+1, length(s) ); table1.fieldbyname(´Orcamento´).AsString := copy( s , 1 , pos(´;´,s)-1 ); s:=copy(s,pos(´;´,s)+1, length(s) ); table1.fieldbyname(´Historico´).AsString := copy( s , 1 , pos(´;´,s)-1 ); s:=copy(s,pos(´;´,s)+1, length(s) ); table1.fieldbyname(´ConfPC´).AsString := copy( s , 1 , pos(´;´,s)-1 ); s:=copy(s,pos(´;´,s)+1, length(s) ); table1.post; end; end;
E para [b:f8f49da4e8]EXPORTAR[/b:f8f49da4e8] os dados:
procedure TF_principal.SBExportarClick(Sender: TObject); var Arq: TextFile; begin if SaveDialog1.Execute then begin Screen.Cursor := crHourGlass; with Table1 do begin Open; First; if not EOF then begin AssignFile(Arq, SaveDialog1.FileName); ReWrite(Arq); repeat WriteLn(Arq,FieldByName(´Nome´).AsString + ´;´ + FieldByName(´Endereco´).AsString + ´;´ + FieldByName(´Bairro´).AsString + ´;´ + FieldByName(´Telefone´).AsString + ´;´ + FieldByName(´Telcel´).AsString + ´;´); //+ FieldByName(´Orcamento´).AsString + ´;´ + FieldByName(´Historico´).AsString + ´;´ + FieldByName(´ConfPC´).AsString + ´;´); next; until EOF; CloseFile(Arq); end; close; end; Table1.active:=True; QOrdenar.Active:=false; QOrdenar.Active:=true; Screen.Cursor := crDefault; ShowMessage(´Arquivo criado com sucesso´); end; end;
Só que trava, e as vezes ele faz a exportação/importação. Fiz um arquivo de teste que possui os itens na tabela em [b:f8f49da4e8]PARADOX:
Indice - Autoincremento;
Nome, Telefone, Telcel - Alpha;
Memo - MEMO de 2mb
[/b:f8f49da4e8]
Este funciona perfeitamente, sendo que o mesmo posui apenas 4 registros.
[size=14:f8f49da4e8][b:f8f49da4e8][color=green:f8f49da4e8] Gostaria de saber o que ocasiona o erro e a lentidão para importar, exportar a tabela ?[/color:f8f49da4e8][/b:f8f49da4e8][/size:f8f49da4e8]
GOSTEI 0
Wbb
18/10/2004
Uma forma bem simples de separar os campos é simplesmente subistituindo os ´;´ por ´Enter´ e colocando tudonum TStringList. Dái é só inserir os dados em seu BD. Claro que o formato dos registros do arquivo CSV (texto) deve ser sempre o mesmo.
Ex.:
Ex.:
Var Registros: TStringList; ListaCampos: TStringList; j: Integer Const Enter_ = #13 + 10; begin Registros := TStringList.Create; ListaCampos := TStringList.Create; Registros.LoadFromFile(´Path + Nome_do_Arquivo´); for j := 0 to Registros.Count -1 do begin // Separa os campos do registro em itens do TStrinList, registro a registro. ListaCampos.Text := StringReplace(Registros[j], ´;´, Enter_, [rfReplaceAll, rfIgnoreCase]); ////// coloque aqui a inserção dos campos no BD ///////// table1.append; table1.fieldbyname(´Campo1´).AsString := ListaCampos[1]; table1.fieldbyname(´Campo2´).AsString := ListaCampos[2]; table1.fieldbyname(´Campo3´).AsString := ListaCampos[3]; table1.fieldbyname(´Campo4´).AsString := ListaCampos[4]; . . . table1.fieldbyname(´CampoN´).AsString := ListaCampos[N]; table1.post; ///////////////////////////////////////////////////////// end; Registros.Free; ListaCampos.Free; end;
GOSTEI 0
Paullsoftware
18/10/2004
só pra complicar um poquinho a nossa discurção vou entrar e fazer um pergunta simples...
e se vinher uma linha assim:
cod - nome - end - end_comp - fone - celular - cep - cidade...
01;Paulo Ricardo;Rua Trinta e Cinco, nº20;;;;;Cabo...
os lugares onde viriam end_comp, fone, celular e cep vinhecem em braco??
e se vinher uma linha assim:
cod - nome - end - end_comp - fone - celular - cep - cidade...
01;Paulo Ricardo;Rua Trinta e Cinco, nº20;;;;;Cabo...
os lugares onde viriam end_comp, fone, celular e cep vinhecem em braco??
GOSTEI 0
Franthesco
18/10/2004
Amigos...
Esta dica, foi de muita importância para mim... Estava precisando de algo deste tipo, e procurando e lendo os foruns achei este tópico.
Mas, tive uma dúvida quanto a importação de dados.
Faço cadastros, e exporto para txt. Até aí td bem... Mas, quando vou importar os dados, há duplicidade, pois alguns registros já foram salvos na tabela. Não sei se fui claro, mas gostaria de saber como evitar esta duplicidade de registros...
Desde já, agradeço!
Abraços!
Esta dica, foi de muita importância para mim... Estava precisando de algo deste tipo, e procurando e lendo os foruns achei este tópico.
Mas, tive uma dúvida quanto a importação de dados.
Faço cadastros, e exporto para txt. Até aí td bem... Mas, quando vou importar os dados, há duplicidade, pois alguns registros já foram salvos na tabela. Não sei se fui claro, mas gostaria de saber como evitar esta duplicidade de registros...
Desde já, agradeço!
Abraços!
GOSTEI 0
Aroldo Zanela
18/10/2004
Colega,
É só implementar na sua rotina de importação qual deverá ser a ação do sistema sob essas condições: Substituir/atualizar, descartar, etc.
É só implementar na sua rotina de importação qual deverá ser a ação do sistema sob essas condições: Substituir/atualizar, descartar, etc.
GOSTEI 0
Wbb
18/10/2004
Olá Aroldo!
Tenho exatamente o mesmo problema relatado pelo Franthesco e está me ferrando, pois na tabela onde devo verificar a existência de registros duplicados há mais de 80 mil registros. Essa quantidade de registros apesar de não ser tão grande assim, está fazendo a pesquisa ficar bem lenta.
Já criei uma view separada para servir de auxílio, mas não adiantou. Nela eram agrupados e contatos os registros duplicados para que fosse possível apagár os excedentes, mas mesmo assim está lento o processo.
Tem alguma sugestão?
Valeu!
Tenho exatamente o mesmo problema relatado pelo Franthesco e está me ferrando, pois na tabela onde devo verificar a existência de registros duplicados há mais de 80 mil registros. Essa quantidade de registros apesar de não ser tão grande assim, está fazendo a pesquisa ficar bem lenta.
Já criei uma view separada para servir de auxílio, mas não adiantou. Nela eram agrupados e contatos os registros duplicados para que fosse possível apagár os excedentes, mas mesmo assim está lento o processo.
Tem alguma sugestão?
Valeu!
GOSTEI 0
Aroldo Zanela
18/10/2004
Colega,
Neste caso (importação) é melhor definir uma chave primária e descartar os registros que ´caírem´ na exceção, bem como, confirmar (commit) a cada 1000 registros para otimizar a inserção.
Neste caso (importação) é melhor definir uma chave primária e descartar os registros que ´caírem´ na exceção, bem como, confirmar (commit) a cada 1000 registros para otimizar a inserção.
GOSTEI 0
Paullsoftware
18/10/2004
Caros Wbb e Franthesco...
é muito simples de resolver os seus problemas basta tratar os dados antes de fazer alguma rotina Inserção/Atualização tipo:
aqui vai parte do código que uso hoje para importar os dados de um txt para minha base, cheguei a essa concepção graças a ajuda de amigos aqui do fórum como Aroldo, Cristian e outros...
essa foi a melhor maneira que achei para importar os dados do txt, se alguém conhece alguma forma mais rápida de importar por favor me avise!
:wink:
é muito simples de resolver os seus problemas basta tratar os dados antes de fazer alguma rotina Inserção/Atualização tipo:
aqui vai parte do código que uso hoje para importar os dados de um txt para minha base, cheguei a essa concepção graças a ajuda de amigos aqui do fórum como Aroldo, Cristian e outros...
//****************************************************************************** DEPENDENTES if RadioButton2.Checked then begin Gauge1.Progress := 0; Gauge1.MaxValue := TotImpor(ExtractFilePath(NomeArquivo),ExtractFileName(NomeArquivo)); try Registros := TStringList.Create; ListaCampos := TStringList.Create; Registros.LoadFromFile(NomeArquivo); try for j := 0 to Registros.Count -1 do begin ListaCampos.Text := StringReplace(Registros[j], ´;´, Enter_, [rfReplaceAll, rfIgnoreCase]); DEPENDENTES.Close; DEPENDENTES.SelectSQL[1]:=´ WHERE CODSAFPE =:PESQUISA´; DEPENDENTES.ParamByName(´PESQUISA´).AsString := ListaCampos[0]; DEPENDENTES.Open; (* //******************************************** LOCALIZA O REGISTRO DO TITULAR TITULAR.Close; TITULAR.SelectSQL[1]:=´ WHERE CODSAFPE=:PESQUISA ´; TITULAR.ParamByName(´PESQUISA´).AsString := ListaCampos[0]; TITULAR.Open; //*********************************************************************** *) IF DEPENDENTES.IsEmpty THEN BEGIN DEPENDENTES.Insert; DEPENDENTES.FieldByName(´CODSAFPE´).AsString := ListaCampos[0]; DEPENDENTES.FieldByName(´MATRICULA´).AsString := ListaCampos[1]; DEPENDENTES.FieldByName(´NOME´).AsString := ListaCampos[2]; DEPENDENTES.FieldByName(´NASCIMENTO´).AsString := ListaCampos[3]; DEPENDENTES.Post; DEPENDENTES.ApplyUpdates; Gauge1.Progress := Gauge1.Progress + 1; end else begin vUpDate := False; if ListaCampos[0] <> DEPENDENTES.FieldByName(´CODSAFPE´).AsString then vUpDate := True; if ListaCampos[1] <> DEPENDENTES.FieldByName(´MATRICULA´).AsString then vUpDate := True; if ListaCampos[2] <> DEPENDENTES.FieldByName(´NOME´).AsString then vUpDate := True; if ListaCampos[3] <> DEPENDENTES.FieldByName(´NASCIMENTO´).AsString then vUpDate := True; if not vUpDate then begin Gauge1.Progress := Gauge1.Progress + 1; Label1.Caption := ´ SEM ALTERAÇÕES ´+10; Label1.Refresh; Label1.Update; end else begin DEPENDENTES.Edit; DEPENDENTES.FieldByName(´CODSAFPE´).AsString := ListaCampos[0]; DEPENDENTES.FieldByName(´MATRICULA´).AsString := ListaCampos[1]; DEPENDENTES.FieldByName(´NOME´).AsString := ListaCampos[2]; DEPENDENTES.FieldByName(´NASCIMENTO´).AsString := ListaCampos[3]; DEPENDENTES.Post; DEPENDENTES.ApplyUpdates; Gauge1.Progress := Gauge1.Progress + 1; end; end; end; finally Registros.Free; ListaCampos.Free; end; except on msg : Exception do MessageDlg(´Ocorreu o seguinte erro: ´+ msg.Message, mtWarning, [ mbOK ], 0); end; dhDeps(StrToDateTime(DataTxt(txtDEPDS))); end;
essa foi a melhor maneira que achei para importar os dados do txt, se alguém conhece alguma forma mais rápida de importar por favor me avise!
:wink:
GOSTEI 0