Jump to content
Fórum Script Brasil
  • 0

(Resolvido) Abrir arquivo texto muito grande!


Gustavo_Sid

Question

Olá amigos. Estou precisando abrir um arquivo não tão grande de tamanho, mais tem uma unica linha com 36.359.987 colunas e não consigo abrir ele pelo TextFile e nem pelo TFileStream, porque não consigo criar um vetor de Char com este tamanho para ler o arquivo.

Alguém consegue me ajudar ??

Obrigado.

Link to comment
Share on other sites

3 answers to this question

Recommended Posts

  • 0

eu já passei por isso, com geração e manutenção de arquivos de sped...

existem várias formas de se carregar um arquivo mas como você mesmo disse no tópico é um arquivo extenso, então tem que utilizar da mais leve possível...

faz assim, cria dinâmico ^^ sem vetor com tamanho fixo, vai alocando na medida em que vai lendo, se for da maneira certa leitura binaria funciona certinho hehe...

vamos a um exemplo rapido, olha...

var

iFileHandle, iFileLength, iBytesRead, i : Integer;

Buffer: PChar;

TxtDirName, str : String;

begin

TxtDirName := 'caminho e nome do arquivo que você pretende carregar para leitura';

agora vou abrir e modo leitura

iFileHandle := FileOpen(TxtDirName, fmOpenRead);

vou pegar o tamanho e posicionar no inicio

iFileLength := FileSeek(iFileHandle,0,2);

FileSeek(iFileHandle,0,0);

Buffer := PChar(AllocMem(iFileLength + 1));

vou carregar agora minha variavel de Buffer

iBytesRead := FileRead(iFileHandle, Buffer^, iFileLength);

fecho o arquivo, daqui pra frente não preciso mais dele

FileClose(iFileHandle);

agora por fim a leitura do meu buffer e jogo para a string final que vai conter o conteudo do arquivo

for i := 0 to iBytesRead-1 do

begin

str := str + Buffer;

end;

limpo da memoria a minha variavel de Buffer que até então ainda continua carregada

FreeMem(Buffer);

agora pode utilizar normal... por exemplo

Memo1.Text := str;

end;

eu tive inumeros problemas com leitura de arquivos grandes, desenvolvi alguns sisteminhas para comparação de arquivos fiscais

sintegra, sped, etc... por fim encontrei algumas formas de obter desempenho e evitar erros de memoria...

espero que ajude, qualquer dúvida só postar ^^

Edited by Samara
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      152.2k
    • Total Posts
      652k
×
×
  • Create New...