Ir para conteúdo
Fórum Script Brasil
  • 0

Como Optimizar Leitura/gravação De Arquivos?


romario

Pergunta

Aew pessoal, meu programa esta todo explicadinho aew nele mesmo.

Ele converte um arquivo.txt para outro arquivo.txt em formatação diferente.

O problema é que a conversão trava com arquivos muito grandes. (32Mb)

Eu consegui converter no max 26Mb... e eu ainda acho, que dependendo do computador, ele deve travar antes!

Me dêem um help para fazer o programa gravar qualquer tamanho de arquivo!!

valewz!!

user posted image

unit conversor;

interface

uses

  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

  Buttons, ExtCtrls, StdCtrls, ToolWin, ComCtrls, Gauges;

type

  Tconversor_dados = class(TForm)

    Button_fechar: TSpeedButton;

    Abrir: TOpenDialog;

    SpeedButton_abrir: TSpeedButton;

    ButtonConverte: TButton;

    Salvar: TSaveDialog;

    barra: TGauge;

    Edit1: TEdit;

    Edit2: TEdit;

    Label1: TLabel;

    Label2: TLabel;

    ButtonSalva: TButton;

    Edit3: TEdit;

    procedure Button_fecharClick(Sender: TObject);

    procedure SpeedButton_abrirClick(Sender: TObject);

    procedure ButtonConverteClick(Sender: TObject);

    procedure ButtonSalvaClick(Sender: TObject);

  private

    { Private declarations }

  public

    { Public declarations }

  end;

var

  conversor_dados: Tconversor_dados;

  ArqTxt,Entrada : TextFile;

implementation

{$R *.DFM}

procedure Tconversor_dados.Button_fecharClick(Sender: TObject);

begin

Application.terminate;

end;

//botão abrir

procedure Tconversor_dados.SpeedButton_abrirClick(Sender: TObject);

begin

                barra.Progress:=0;

                Edit3.Text:='';

                Edit2.Text:='';

        Abrir.Execute;

                ButtonSalva.Enabled:=true;

                AssignFile(Entrada,Abrir.filename);

                Reset(Entrada);

                Edit1.Text:=Abrir.FileName;

end;

//botão converter

procedure Tconversor_dados.ButtonConverteClick(Sender: TObject);

const Branco=' ';

var

linha,ant,data,hora,c,d,e,f,g,h,sinald,sinale,linhaconv:string;

x,y,z:Integer;

auxd,auxh,auxe,auxg:real;

dado: array[1..15] of string;

begin

ReWrite(ArqTxt);

while EoF(Entrada)=false do

begin

//progress bar

z:=Round((100*FilePos(Entrada))/FileSize(Entrada));

barra.Progress:=z;

ReadLn(Entrada,linha);

//exemplo da linha de entrada

//0 08/12/2003 22:00  479011500 -24.0812 -53.3602 0  -22  5  2  136.4  .5  .3  8

//nesse while, ele vai copiando cada coluna para um vetor  dado[x]

//quando acha espaço em branco, pula para o prox vetor dado[x+1]

x:=1;

        while x <> 10 do

        Begin

                if copy(linha,1,1) <> Branco then

                        begin

                        dado[x]:=dado[x]+copy(linha,1,1);

                        delete(linha,1,1);

                        ant:='informacao';

                        end

                Else

                begin

                        delete(linha,1,1);

                                if ant='informacao' then

                                begin

                                x:=x+1;

                                end;

                        ant:='espaco';

                end;

        end;

//conversao de formatos

data:=copy(dado[2],1,5)+'/'+copy(dado[2],9,2);

hora:=copy(dado[3],1,2)+copy(dado[3],4,2);

c:=copy(dado[4],1,5);

f:=copy(dado[8],1,1);

auxh:=StrToFloat(dado[9]);

h:=FormatFloat('000',auxh);

sinald:=copy(dado[5],1,1);

delete(dado[5],1,1);

auxd:=StrToFloat(dado[5]);

d:=FormatFloat('0.0000',auxd);

sinale:=copy(dado[6],1,1);

delete(dado[6],1,1);

auxe:=StrToFloat(dado[6]);

e:=FormatFloat('0.0000',auxe);

auxg:=StrToFloat(dado[8]);

auxg:=Abs(auxg)*1000;

g:=FloatToStr(auxg);

if auxg<99999 then begin

g:=' '+g;

end;

linhaconv:=data+' '+hora+'.'+c+f+h+' '+sinald+d+' '+sinale+e+' '+g+'';

// fim da conversão e gravação do arquivo

Writeln(ArqTxt,linhaconv);

//limpando variaveis

dado[1]:='';

dado[2]:='';

dado[3]:='';

dado[4]:='';

dado[5]:='';

dado[6]:='';

dado[7]:='';

dado[8]:='';

dado[9]:='';

dado[10]:='';

data:='';hora:='';linha:='';ant:='';c:='';d:='';e:='';f:='';g:='';

sinald:='';sinale:='';

end;

linhaconv:='';

//fecha e finaliza conversao

CloseFile(ArqTxt);

CloseFile(Entrada);

Edit3.text:='Conversão Feita!';

ButtonSalva.Enabled:=false;

ButtonConverte.Enabled:=false;

barra.Progress:=100;

end;

//botão salvar seleciona o nome do arquivo q sera salvo

procedure Tconversor_dados.ButtonSalvaClick(Sender: TObject);

begin

Salvar.execute;

AssignFile(ArqTxt,Salvar.filename);

Edit2.Text:=Salvar.FileName;

ButtonConverte.Enabled:=true;

end;

end.

brigadão !

Link para o comentário
Compartilhar em outros sites

1 resposta a esta questão

Posts Recomendados

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...