Ir ao conteúdo

Posts recomendados

Postado

Salve, meus amigos

 

 Estou em busca de uma macro que: Abra a caixa de dialogo do Windows para que o usuário busque uma determinada pasta. Nela, contem varios arquivos na extensão txt.

 Conforme o print, todos os arquivos contem 7 linhas e seguem o mesmo padrão.

 O objetivo é percorrar todos os arquivos e contar quantas vezes surge o valor $50 e atribuir o total a uma variável.

 

 Grato a quem poder colaborar.

 

 

Clubdohardware.PNG

Postado

@ricardo_br Obrigado por se dispor a ajudar.

 Sim, teria que ser em VB porque uso o excel. A pasta vem sempre nesse padrão, só muda a quantidade de arquivos. 

 Quanto ao texto a ser extráido, seria o que está após o "Buy-in:". que no caso, como pode obeservar,  tem um espaço antes do "$50".

Postado

@valbeezerra Veja se é isto.

 

A macro procura a linha de todos os arquivos txt que começa com Buy-in: para somar com o valor que vem após o cifrão. E o valor vai para a célula A1.

 

Sub SomaValor()
    Const LEITURA   As Integer = 1
    Dim Pasta       As Variant
    Dim Arquivo     As Object
    Dim Txt         As Object
    Dim Fso         As Object
    Dim StrLinha    As String
    Dim SpValor     As Variant
    Dim Soma        As Single
    
    Set Fso = CreateObject("Scripting.Filesystemobject")
    
    With Application.FileDialog(msoFileDialogFolderPicker)
        If .Show = -1 Then
            Pasta = .SelectedItems(1)
            For Each Arquivo In Fso.GetFolder(Pasta).Files
                If LCase(Fso.GetExtensionName(Arquivo.Path)) = "txt" Then
                    Set Txt = Fso.OpenTextFile(Arquivo.Path, LEITURA)
                    Do Until Txt.AtEndOfStream
                        StrLinha = Txt.ReadLine
                        If Left(StrLinha, Len("Buy-in:")) = "Buy-in:" Then
                            SpValor = Split(StrLinha, "$")
                            If UBound(SpValor) = 1 Then
                                If IsNumeric(SpValor(1)) Then
                                    Soma = Soma + Trim(SpValor(1))
                                End If
                            End If
                        End If
                    Loop
                Txt.Close
                End If
            Next Arquivo
        End If
        [A1] = Soma
    End With
End Sub

 

  • Curtir 2
Postado

Aqui está a versão batch, você copia o código abaixo para o bloco de notas, salva com o nome que quiser mais com extensão *.bat. Ai é só arrastar a pasta com os arquivos para o arquivo bat...

 

@echo off

if exist "%~1" (if not exist "%~1\" exit) else (exit)

for /f "delims=" %%a in ('dir /b "%~1\*.txt"') do for /f "tokens=2 delims=$" %%b in ('type "%~1\%%a"^|find /i "Buy-in:"') do call set /a Contador=%%Contador%%+%%b
echo.
echo Valor total: %Contador%
echo.
pause

 

HaVBowK.gif

Postado

@ricardo_br Desculpe-me pela demora em responder. Só agora que fiz o procedimento.

 

 Quanto a funcionalidade, ache muito incrivel a rapidez com que percorre dodos os arquivos. Não sou programador, conheço muitissimo pouco vba e por isso achei que seria melhor para acrescentar algo e tal..

 

Duas perguntas perguntas: Assim, seria possível criar um gráfico em linha? Outra, seria possível ler o arquivo compactado?

 

No mais, fico grato por responder.

  • 3 semanas depois...
Postado

@Midori Essa macro que você partilhou, tem como adaptar de modo que leia até encotrar aprimeira linha vazia? o conteúdo que interessa está antes de duas linhas vazias. Derreti o cerebro e não achei como fazer isso hahaha. Pode me ajudar nisso?

TXT Exemplo.PNG

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