Ir ao conteúdo
  • Cadastre-se

Excel Leitura das ultimas "X" linhas de arquivo TXT (usando variáveis LOF & LOC)


Ir à solução Resolvido por Mlramos,

Posts recomendados

Ola!
Tenho arquivos TXTs enormes e gostaria de ler as últimas "X" linhas (a definir, mas aproximadamente 100), pois contém as informações que busco.

Já usei o método "padrão" (conforme abaixo) e verifiquei o conteúdo que busco... funciona!

 

Do While Not EOF(1) 

    Line Input #1, Linha 

    If Mid(Linha, 2, 4) = "9900" Then 

    .... 

    ElseIf Mid(Linha, 2, 4) = "9999" Then 

    .... 

        Exit Do 

    End If 

Loop 

 

Entretanto como alguns arquivos são muito grandes as leituras são beeeeem lentas.

Gostaria de ler os últimos bytes ou linhas do arquivo alterando a posição de leitura do arquivo aberto #1

Sei que a variável LOF(1) me traz o tamanho do arquivo... mas não consigo alterar a posição de leitura LOC(1) para LOF(1) - 1000 (por exemplo), como proceder ?

 

LOC(1) = LOF(1) - 1000   <=== Não funciona! =(

Link para o comentário
Compartilhar em outros sites

@Mlramos Boas,

Veja se isto resolve:

 

Private Sub Ultimos_100()
    Dim f As Integer
    Dim strLine As String
    Dim strArray(99999) As String
    Dim lineCnt As Long
    Dim i As Long
    ' ---
    f = FreeFile
    Open "Caminho Aqui.txt" For Input As #f
    lineCnt = 0
    Do Until EOF(f)
        Line Input #f, strLine
        strArray(lineCnt) = strLine
        lineCnt = lineCnt + 1
    Loop
    Close #f
    ' ---
    f = FreeFile
    Open "Caminho Aqui.txt" For Output As #f
    For i = lineCnt - 100 To lineCnt - 1
        Print #f, strArray(i)
    Next i
    Close #f
End Sub

 

Ps. Não testei

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

  • Solução

@AfonsoMira grato pelo exemplo, tentativa e esforço... mas meu código já fazia algo semelhante, ou seja, a leitura linha-a-linha! Entretanto eu precisava ler as últimas 100 (chute) linhas de arquivos com milhões de linhas... o que torna nossos códigos acima demorados.

 

A boa notícia é que resolvi! Então, para registro, caso alguém precise... consegui resolver da seguinte forma:

 

       

PriLin = True 
        Open Worksheets("MENU").Cells(3, 1).Value & Worksheets("MENU").Cells(IX, 1).Value For Input As #1 
        Do While Not EOF(1) 
            If LOF(1) > 10000 And PriLin Then 
                Seek #1, LOF(1) - 10000 
                PriLin = False 
            End If 
            Line Input #1, Linha 
            If Mid(Linha, 2, 4) = "9900" Then 
        ... 
            ElseIf Mid(Linha, 2, 4) = "9999" Then 
        ... 
                Exit Do 
            End If 
        Loop 

 

Resumindo... na primeira leitura de cada arquivo, o comando SEEK "joga" a leitura lá para o final, alterando a posição de leitura (variável LOC) para o tamanho do arquivo menos 10.000 caracteres (fiz um teste e ficou ok!). E depois continua a leitura linha-a-linha me permitindo tratar os resultados.

=D

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!