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

(Resolvido) Abrir arquivo texto muito grande!


Gustavo_Sid

Pergunta

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 para o comentário
Compartilhar em outros sites

3 respostass a esta questão

Posts Recomendados

  • 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 ^^

Editado por Samara
Link para o comentário
Compartilhar em outros sites

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
      152k
    • Posts
      651,7k
×
×
  • Criar Novo...