Re: Res: [delphi-br] Leitura de arquivo texto
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 delphi-br%40yahoogrupos.com.br From: [EMAIL PROTECTED] gyncowboy%40yahoo.com.br 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]auriston.delphi%40yahoo.com.br Para: delphi-br@yahoogrupos.com.br delphi-br%40yahoogrupos.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]
[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(Nomearquivo, OpenDialog1.FileName); Screen.Cursor := crSQLWait; ProgressBar1.Min := 0; ProgressBar1.Max := Tilinha; Reset(Nomearquivo); dm.qrytemp.DisableControls; 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.FieldByname('MAQUINA').Value := 0; dm.qrytemp.FieldByName('linha').AsString := Copy (Entrada,1,126); if Copy(Entrada,1,2) = '50' then Begin dm.qrytemp.FieldByname ('CNPJ').Asstring := Copy(Entrada,3,14); dm.qrytemp.FieldByname ('NOTA').Asstring := Copy(Entrada,46,6); End; if Copy(Entrada,1,2) = '53' then Begin dm.qrytemp.FieldByname ('CNPJ').Asstring := Copy(Entrada,3,14); dm.qrytemp.FieldByname ('NOTA').Asstring := Copy(Entrada,46,6); End; if Copy(Entrada,1,2) = '54' then Begin dm.qrytemp.FieldByname ('CNPJ').Asstring:= Copy(Entrada,3,14); dm.qrytemp.FieldByname ('NOTA').Asstring:= Copy(Entrada,22,6); dm.qrytemp.FieldByname ('produto').Asstring := Copy(Entrada,38,14); dm.qrytemp.FieldByName ('ITEM').AsString:= Copy(Entrada,35,3); End; if Copy(Entrada,1,2) = '75' then dm.qrytemp.FieldByName ('Produto').AsString := Copy(Entrada,19,14); dm.qrytemp.Post; End; // ProgressBar1.Position := iLinha; End; dm.qrytemp.EnableControls; Precsisode um ajuda para otimizar o codigo acima para que ele fique mais leve. Uso D7 + IBX + FIREBIRD 1.5 sds Auriston
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 !-- #ygrp-mkp{ border:1px solid #d8d8d8;font-family:Arial;margin:14px 0px;padding:0px 14px;} #ygrp-mkp hr{ border:1px solid #d8d8d8;} #ygrp-mkp #hd{ color:#628c2a;font-size:85%;font-weight:bold;line-height:122%;margin:10px 0px;} #ygrp-mkp #ads{ margin-bottom:10px;} #ygrp-mkp .ad{ padding:0 0;} #ygrp-mkp .ad a{ color:#ff;text-decoration:none;} -- !-- #ygrp-sponsor #ygrp-lc{ font-family:Arial;} #ygrp-sponsor #ygrp-lc #hd{ margin:10px 0px;font-weight:bold;font-size:78%;line-height:122%;} #ygrp-sponsor #ygrp-lc .ad{ margin-bottom:10px;padding:0 0;} -- !-- #ygrp-mlmsg {font-size:13px;font-family:arial, helvetica, clean, sans-serif;} #ygrp-mlmsg table {font-size:inherit;font:100%;} #ygrp-mlmsg select, input, textarea {font:99% arial, helvetica, clean, sans-serif;} #ygrp-mlmsg pre, code {font:115% monospace;} #ygrp-mlmsg * {line-height:1.22em;} #ygrp-text{ font-family:Georgia; } #ygrp-text p{ margin:0 0 1em 0;} #ygrp-tpmsgs{ font-family:Arial; clear:both;} #ygrp-vitnav{ padding-top:10px;font-family:Verdana;font-size:77%;margin:0;} #ygrp-vitnav a{ padding:0 1px;} #ygrp-actbar{ clear:both;margin:25px 0;white-space:nowrap;color:#666;text-align:right;} #ygrp-actbar .left{ float:left;white-space:nowrap;} .bld{font-weight:bold;} #ygrp-grft{ font-family:Verdana;font-size:77%;padding:15px 0;} #ygrp-ft{ font-family:verdana;font-size:77%;border-top:1px solid #666; padding:5px 0; } #ygrp-mlmsg #logo{ padding-bottom:10px;} #ygrp-vital{ background-color:#e0ecee;margin-bottom:20px;padding:2px 0 8px 8px;} #ygrp-vital #vithd{ font-size:77%;font-family:Verdana;font-weight:bold;color:#333;text-transform:uppercase;} #ygrp-vital ul{ padding:0;margin:2px 0;} #ygrp-vital ul li{ list-style-type:none;clear:both;border:1px solid #e0ecee; } #ygrp-vital ul li .ct{ font-weight:bold;color:#ff7900;float:right;width:2em;text-align:right;padding-right:.5em;} #ygrp-vital ul li .cat{ font-weight:bold;} #ygrp-vital a{ text-decoration:none;} #ygrp-vital a:hover{ text-decoration:underline;} #ygrp-sponsor #hd{ color:#999;font-size:77%;} #ygrp-sponsor #ov{ padding:6px 13px;background
RE: Res: [delphi-br] Leitura de arquivo texto
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/
[delphi-br] Leitura de arquivo texto
Galera, tenho a seguinte situação: Preciso ler um arquivo texto e jogar cada campo em um local específico (edits por exemplo). O problema é que esse arquivo texto terá formatações diferentes e não terá uma forma padrão, poois o arquivo será enviado para mim de diversos locais (pessoas) diferentes e cada um terá uma formatação diferente mas os campos iguais, por exemplo: Um arquivo pode vir assim: Eduardo Silva Rua Xv de novembro, 1256Centro 18680-000 Lençóis Pasulita Marcio José dos SantosAv Brasil, n.º 852 Vila Capoani 18680-000 Lençóis Paulista Renata CeribeliRua das Gaivotas, 963 Jardim Cidade Nova 18680-000 Lençóis Paulista Outro pode vir assim: _ __ _ / )| |( \ / / | Eduardo de Almeida Silva | \ \ _( (_ | _ * [EMAIL PROTECTED] _ | _) )_ (((\ \)|_/ )__( \_|(/ /))) ( \_/ /\ \_/ ) \ / \ / \_/\_/ / /\ \ --- Outgoing mail is certified Virus Free. Checked by AVG anti-virus system (http://www.grisoft.com). Version: 6.0.749 / Virus Database: 501 - Release Date: 01/09/2004 [As partes desta mensagem que não continham texto foram removidas] -- FAVOR REMOVER ESTA PARTE AO RESPONDER ESTA MENSAGEM Para ver as mensagens antigas, acesse: http://br.groups.yahoo.com/group/delphi-br/messages Para falar com o moderador, envie um e-mail para: [EMAIL PROTECTED] ou [EMAIL PROTECTED] Links do Yahoo! Grupos * Para visitar o site do seu grupo na web, acesse: http://br.groups.yahoo.com/group/delphi-br/ * Para sair deste grupo, envie um e-mail para: [EMAIL PROTECTED] * O uso que você faz do Yahoo! Grupos está sujeito aos: http://br.yahoo.com/info/utos.html
Re: [delphi-br] Leitura de arquivo texto
Seria mais fácil você definir o padrão CVS, onde os campos são separados por , ou por ;, ou utilizar TAB como separador de campos, senão você vai se perder. Definido isso, você pode utilizar a função Pos(Separador, Linha) e Copy(Linha, Posição_Inicial, Tamanho) para remover campo a campo. Nielsen On Mon, 13 Sep 2004 11:14:22 -0300, Eduardo Silva ® [EMAIL PROTECTED] wrote: Galera, tenho a seguinte situação: Preciso ler um arquivo texto e jogar cada campo em um local específico (edits por exemplo). O problema é que esse arquivo texto terá formatações diferentes e não terá uma forma padrão, poois o arquivo será enviado para mim de diversos locais (pessoas) diferentes e cada um terá uma formatação diferente mas os campos iguais, por exemplo: Um arquivo pode vir assim: Eduardo Silva Rua Xv de novembro, 1256Centro 18680-000 Lençóis Pasulita Marcio José dos SantosAv Brasil, n.º 852 Vila Capoani 18680-000 Lençóis Paulista Renata CeribeliRua das Gaivotas, 963 Jardim Cidade Nova 18680-000 Lençóis Paulista Outro pode vir assim: _ __ _ / )| |( \ / / | Eduardo de Almeida Silva | \ \ _( (_ | _ * [EMAIL PROTECTED] _ | _) )_ (((\ \)|_/ )__( \_|(/ /))) ( \_/ /\ \_/ ) \ / \ / \_/\_/ / /\ \ --- Outgoing mail is certified Virus Free. Checked by AVG anti-virus system (http://www.grisoft.com). Version: 6.0.749 / Virus Database: 501 - Release Date: 01/09/2004 [As partes desta mensagem que não continham texto foram removidas] -- FAVOR REMOVER ESTA PARTE AO RESPONDER ESTA MENSAGEM Para ver as mensagens antigas, acesse: http://br.groups.yahoo.com/group/delphi-br/messages Para falar com o moderador, envie um e-mail para: [EMAIL PROTECTED] ou [EMAIL PROTECTED] Links do Yahoo! Grupos -- FAVOR REMOVER ESTA PARTE AO RESPONDER ESTA MENSAGEM Para ver as mensagens antigas, acesse: http://br.groups.yahoo.com/group/delphi-br/messages Para falar com o moderador, envie um e-mail para: [EMAIL PROTECTED] ou [EMAIL PROTECTED] Links do Yahoo! Grupos * Para visitar o site do seu grupo na web, acesse: http://br.groups.yahoo.com/group/delphi-br/ * Para sair deste grupo, envie um e-mail para: [EMAIL PROTECTED] * O uso que você faz do Yahoo! Grupos está sujeito aos: http://br.yahoo.com/info/utos.html