Ir ao conteúdo

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


Ir à solução Resolvido por Mlramos,

Posts recomendados

Postado

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! =(

Postado

@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
  • Solução
Postado

@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

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...