Re: Res: [delphi-br] Leitura de arquivo texto

2008-02-15 Por tôpico Willian Leal
Como disse o nosso amigo Rubem, usa StringList, é bem mais rápido e prático.

Em 14/02/08, Rubem Nascimento da Rocha <[EMAIL PROTECTED]> escreveu:
>
>
> Duas coisas:
>
> 1) Carrega o texto todo em um TStringList e navega nele, ao invés de
> navegar fazendo esse lance de abrir/percorrer/fechar. Daí, percorre só o
> TStringList. Fica mais rápido.
>
> 2) Não faz esse lance de post! Vai comer mais memória mesmo, pq as
> atualizações vão ficar todas na estação. O ideal mesmo é abrir uma
> transação, emitir explicitamente os INSERTs/DELETEs/UPDATEs no banco e
> depois, comitar ou cancelar a transação caso esta dê problema.
>
> Com isso tudo, vai ficar uma bala!
>
> Sds.
>
> 
>
> To: delphi-br@yahoogrupos.com.br 
> From: [EMAIL PROTECTED] 
> Date: Thu, 14 Feb 2008 11:27:06 -0800
> Subject: Res: [delphi-br] Leitura de arquivo texto
>
> O que vc pode fazer é a cada 50 registros por exemplo gravar o arquivo
> fisicamente no banco e continuar exportando.
>
> Sempre que gravar os arquivos fisicamente feche e abra a tabela de novo,
> mas sem registros ...
> - Mensagem original 
> De: auriston.delphi <[EMAIL PROTECTED]
> >
> Para: delphi-br@yahoogrupos.com.br 
> Enviadas: Quinta-feira, 14 de Fevereiro de 2008 15:51:32
> Assunto: [delphi-br] Leitura de arquivo texto
>
> Quando efetuo uma leitura de um arquivo texto para gravar o banco de
>
> dados esta dando a mensagem OUT OF MEMORY, eu uso a rotina abaixo:
>
> AssignFile(Nomearqu ivo, OpenDialog1. FileName) ;
>
> Screen.Cursor := crSQLWait;
>
> ProgressBar1. Min := 0;
>
> ProgressBar1. Max := Tilinha;
>
> Reset(Nomearquivo) ;
>
> dm.qrytemp.DisableC ontrols;
>
> while not Eoln(Nomearquivo) do
>
> begin
>
> Form1.Caption := Copy(Entrada, 1,126);
>
> inc(ilinha);
>
> Readln(Nomearquivo, Entrada);
>
> if Copy(Entrada, 1,2) <> '90' then
>
> Begin
>
> dm.qrytemp.Insert;
>
> dm.qrytemp.FieldByn ame('MAQUINA' ).Value := 0;
>
> dm.qrytemp.FieldByN ame('linha' ).AsString := Copy
>
> (Entrada,1,126) ;
>
> if Copy(Entrada, 1,2) = '50' then
>
> Begin
>
> dm.qrytemp.FieldByn ame
>
> ('CNPJ').Asstring := Copy(Entrada, 3,14);
>
> dm.qrytemp.FieldByn ame
>
> ('NOTA').Asstring := Copy(Entrada, 46,6);
>
> End;
>
> if Copy(Entrada, 1,2) = '53' then
>
> Begin
>
> dm.qrytemp.FieldByn ame
>
> ('CNPJ').Asstring := Copy(Entrada, 3,14);
>
> dm.qrytemp.FieldByn ame
>
> ('NOTA').Asstring := Copy(Entrada, 46,6);
>
> End;
>
> if Copy(Entrada, 1,2) = '54' then
>
> Begin
>
> dm.qrytemp.FieldByn ame
>
> ('CNPJ').Asstring := Copy(Entrada, 3,14);
>
> dm.qrytemp.FieldByn ame
>
> ('NOTA').Asstring := Copy(Entrada, 22,6);
>
> dm.qrytemp.FieldByn ame
>
> ('produto'). Asstring := Copy(Entrada, 38,14);
>
> dm.qrytemp.FieldByN ame
>
> ('ITEM').AsString := Copy(Entrada, 35,3);
>
> End;
>
> if Copy(Entrada, 1,2) = '75' then
>
> dm.qrytemp.FieldByN ame
>
> ('Produto'). AsString := Copy(Entrada, 19,14);
>
> dm.qrytemp.Post;
>
> End;
>
> // ProgressBar1. Position := iLinha;
>
> End;
>
> dm.qrytemp.EnableCo ntrols;
>
> Precsisode um ajuda para otimizar o codigo acima para que ele fique
>
> mais leve.
>
> Uso D7 + IBX + FIREBIRD 1.5
>
> sds
>
> Auriston
>
> Abra sua conta no Yahoo! Mail, o único sem limite de espaço para
> armazenamento!
> http://br.mail.yahoo.com/
>
> [As partes desta mensagem que não continham texto foram removidas]
>
> __
> Conheça o Windows Live Spaces, a rede de relacionamentos do Messenger!
> http://www.amigosdomessenger.com.br/
>
> 
>



-- 
Willian Leal
Desenvolvedor de Softwares
MSN: [EMAIL PROTECTED]
Celular:(32) 8409 - 3077


[As partes desta mensagem que não continham texto foram removidas]



RE: Res: [delphi-br] Leitura de arquivo texto

2008-02-14 Por tôpico Rubem Nascimento da Rocha

Duas coisas:

1) Carrega o texto todo em um TStringList e navega nele, ao invés de navegar 
fazendo esse lance de abrir/percorrer/fechar. Daí, percorre só o TStringList. 
Fica mais rápido.

2) Não faz esse lance de post! Vai comer mais memória mesmo, pq as atualizações 
vão ficar todas na estação. O ideal mesmo é abrir uma transação, emitir 
explicitamente os INSERTs/DELETEs/UPDATEs no banco e depois, comitar ou 
cancelar a transação caso esta dê problema.

Com isso tudo, vai ficar uma bala!

Sds.




To: delphi-br@yahoogrupos.com.br
From: [EMAIL PROTECTED]
Date: Thu, 14 Feb 2008 11:27:06 -0800
Subject: Res: [delphi-br] Leitura de arquivo texto







O que vc pode fazer é a cada 50 registros por exemplo gravar o arquivo 
fisicamente no banco e continuar exportando.

Sempre que gravar os arquivos fisicamente feche e abra a tabela de novo, mas 
sem registros ...
- Mensagem original 
De: auriston.delphi <[EMAIL PROTECTED]>
Para: delphi-br@yahoogrupos.com.br
Enviadas: Quinta-feira, 14 de Fevereiro de 2008 15:51:32
Assunto: [delphi-br] Leitura de arquivo texto

Quando efetuo uma leitura de um arquivo texto para gravar o banco de

dados esta dando a mensagem OUT OF MEMORY, eu uso a rotina abaixo:

AssignFile(Nomearqu ivo, OpenDialog1. FileName) ;

Screen.Cursor := crSQLWait;

ProgressBar1. Min := 0;

ProgressBar1. Max := Tilinha;

Reset(Nomearquivo) ;

dm.qrytemp.DisableC ontrols;

while not Eoln(Nomearquivo) do

begin

Form1.Caption := Copy(Entrada, 1,126);

inc(ilinha);

Readln(Nomearquivo, Entrada);

if Copy(Entrada, 1,2) <> '90' then

Begin

dm.qrytemp.Insert;

dm.qrytemp.FieldByn ame('MAQUINA' ).Value := 0;

dm.qrytemp.FieldByN ame('linha' ).AsString := Copy

(Entrada,1,126) ;

if Copy(Entrada, 1,2) = '50' then

Begin

dm.qrytemp.FieldByn ame

('CNPJ').Asstring := Copy(Entrada, 3,14);

dm.qrytemp.FieldByn ame

('NOTA').Asstring := Copy(Entrada, 46,6);

End;

if Copy(Entrada, 1,2) = '53' then

Begin

dm.qrytemp.FieldByn ame

('CNPJ').Asstring := Copy(Entrada, 3,14);

dm.qrytemp.FieldByn ame

('NOTA').Asstring := Copy(Entrada, 46,6);

End;

if Copy(Entrada, 1,2) = '54' then

Begin

dm.qrytemp.FieldByn ame

('CNPJ').Asstring := Copy(Entrada, 3,14);

dm.qrytemp.FieldByn ame

('NOTA').Asstring := Copy(Entrada, 22,6);

dm.qrytemp.FieldByn ame

('produto'). Asstring := Copy(Entrada, 38,14);

dm.qrytemp.FieldByN ame

('ITEM').AsString := Copy(Entrada, 35,3);

End;

if Copy(Entrada, 1,2) = '75' then

dm.qrytemp.FieldByN ame

('Produto'). AsString := Copy(Entrada, 19,14);

dm.qrytemp.Post;

End;

// ProgressBar1. Position := iLinha;

End;

dm.qrytemp.EnableCo ntrols;

Precsisode um ajuda para otimizar o codigo acima para que ele fique

mais leve.

Uso D7 + IBX + FIREBIRD 1.5

sds

Auriston







Abra sua conta no Yahoo! Mail, o único sem limite de espaço para armazenamento!
http://br.mail.yahoo.com/

[As partes desta mensagem que não continham texto foram removidas]









_
Conheça o Windows Live Spaces, a rede de relacionamentos do Messenger!
http://www.amigosdomessenger.com.br/

Res: [delphi-br] Leitura de arquivo texto

2008-02-14 Por tôpico Andre Luis Silveria
O que vc pode fazer é a cada 50 registros por exemplo gravar o arquivo 
fisicamente no banco e continuar exportando.

Sempre que gravar os arquivos fisicamente feche e abra a tabela de novo, mas 
sem registros ...
- Mensagem original 
De: auriston.delphi <[EMAIL PROTECTED]>
Para: delphi-br@yahoogrupos.com.br
Enviadas: Quinta-feira, 14 de Fevereiro de 2008 15:51:32
Assunto: [delphi-br] Leitura de arquivo texto









  



Quando efetuo uma leitura de um arquivo texto para gravar o banco 
de 

dados esta dando a mensagem OUT OF MEMORY, eu uso a rotina abaixo:

 AssignFile(Nomearqu ivo, OpenDialog1. FileName) ;

 Screen.Cursor := crSQLWait;

 ProgressBar1. Min := 0;

 ProgressBar1. Max := Tilinha;

 Reset(Nomearquivo) ;

 dm.qrytemp.DisableC ontrols;

 while not Eoln(Nomearquivo) do

begin

   Form1.Caption := Copy(Entrada, 1,126);

   inc(ilinha);

   Readln(Nomearquivo, Entrada);

   if Copy(Entrada, 1,2) <> '90' then

  Begin

 dm.qrytemp.Insert;

 dm.qrytemp.FieldByn ame('MAQUINA' ).Value  := 0;

 dm.qrytemp.FieldByN ame('linha' ).AsString := Copy

(Entrada,1,126) ;

 if Copy(Entrada, 1,2) = '50' then

Begin

   dm.qrytemp.FieldByn ame

('CNPJ').Asstring := Copy(Entrada, 3,14);

   dm.qrytemp.FieldByn ame

('NOTA').Asstring := Copy(Entrada, 46,6);

End;

 if Copy(Entrada, 1,2) = '53' then

Begin

   dm.qrytemp.FieldByn ame

('CNPJ').Asstring := Copy(Entrada, 3,14);

   dm.qrytemp.FieldByn ame

('NOTA').Asstring := Copy(Entrada, 46,6);

End;

 if Copy(Entrada, 1,2) = '54' then

Begin

   dm.qrytemp.FieldByn ame

('CNPJ').Asstring:= Copy(Entrada, 3,14);

   dm.qrytemp.FieldByn ame

('NOTA').Asstring:= Copy(Entrada, 22,6);

   dm.qrytemp.FieldByn ame

('produto'). Asstring := Copy(Entrada, 38,14);

   dm.qrytemp.FieldByN ame

('ITEM').AsString:= Copy(Entrada, 35,3);

End;

 if Copy(Entrada, 1,2) = '75' then

dm.qrytemp.FieldByN ame

('Produto'). AsString := Copy(Entrada, 19,14);

 dm.qrytemp.Post;

  End;

//   ProgressBar1. Position := iLinha;

End;

  dm.qrytemp.EnableCo ntrols;

Precsisode um ajuda para otimizar o codigo acima para que ele fique 

mais leve.

Uso D7 + IBX + FIREBIRD 1.5

sds

Auriston






  
























  Abra sua conta no Yahoo! Mail, o único sem limite de espaço para 
armazenamento!
http://br.mail.yahoo.com/

[As partes desta mensagem que não continham texto foram removidas]