none
Dados txt em um array RRS feed

  • Pergunta

  • Estou precisando colocar dados que estao em um txt para um array, ja testei varios codigos sem sucesso, preciso muito de uma ajuda, eu uso o  VB6!!!
     
    • Editado sidao_40 sexta-feira, 20 de julho de 2012 11:55
    sexta-feira, 20 de julho de 2012 11:53

Respostas

  • consegui depois de muitos teste, ai vai para quem mais precisar

    Dim TextoArquivo, texte As String
    Dim varArray(7) As Integer

        Dim str As String
     
    Private Sub Command1_Click()
        Dim i, conta As Integer
        Dim Arquivo As Integer
        Dim CaminhoArquivo As String
             
        Dim str As String
        
        
        Dim Linha As String
        Dim ContadorLinha As Long
           
     
        'Configura a leitura do arquivo
        Arquivo = FreeFile
        
        
        Arquivo = FreeFile
        CaminhoArquivo = "c:\temp\teste.TXT"
        
        
        'Carrega array com arquivo bruto
        'Abre o arquivo para leitura
        Open CaminhoArquivo For Input As Arquivo
            ContadorLinha = 0
            Do While Not EOF(Arquivo)
                ContadorLinha = ContadorLinha + 1
                Line Input #Arquivo, Linha
                varArray(ContadorLinha) = Linha
            Loop
        Close Arquivo
        
         
         
        'Teste de posicao----------------------------------------------------------
         
         For i = UBound(varArray) - 1 To 1 Step -1
                            MaxVal = varArray(i)
                                    MaxIndex = i
                        
                            For j = 0 To i
                                If varArray(j) > MaxVal Then
                                    MaxVal = varArray(j)
                                    MaxIndex = j
                                End If
                            Next
                        
                            If MaxIndex < i Then
                                varArray(MaxIndex) = varArray(i)
                                varArray(i) = MaxVal
                                                            
                            End If
                        Next
        ''--------------------------------------------------------------------------
        
             str = ""
         For i = 1 To ContadorLinha
             str = str & varArray(i) & vbCrLf
         Next
               
        MsgBox str
    End Sub



     

    • Marcado como Resposta sidao_40 sexta-feira, 20 de julho de 2012 16:59
    sexta-feira, 20 de julho de 2012 16:59

Todas as Respostas

  • Obrigado Frank Pinheiro

    Mais ainda continuo com o mesma dilema

    sexta-feira, 20 de julho de 2012 12:22
  • Segue um exemplo bem simples

    Option Explicit
    Dim contador As Integer
    'declaro o vetor
    Dim Vetor(3) As String
    
    Private Sub Armazenar_Click()
        If contador = 3 Then Exit Sub
        'incremento o contador
        contador = contador + 1
        'guardo a variavel
        Vetor(contador) = Text1.Text
    End Sub
    
    Private Sub Mostrar_Click()
        Dim str As String
        While contador <> 0
            str = str & Vetor(contador) & vbCrLf
            contador = contador - 1
        Wend
        MsgBox str
    End Sub
    

    Caso inicialmente não saiba o tamanho do vetor pode utilizar: 

    ReDim Vetor(NovoTamanho)As String

    como no link patorjk

    sexta-feira, 20 de julho de 2012 13:04
  • Estou tentando com o seguinte codigo, mais nao sei onde estou errando para pegar o array

    Dim TextoArquivo, texte As String
    Dim arr(5) As Integer
     
    Private Sub Command1_Click()
        Dim i, conta As Integer
        Dim Arquivo As Integer
        Dim CaminhoArquivo As String
       Dim str As String
       Dim Linha As String
       Dim ContadorLinha As Long
           
       'Configura a leitura do arquivo
        Arquivo = FreeFile
        Arquivo = FreeFile
        CaminhoArquivo = "c:\temp\teste.TXT"
     
        'Abre o arquivo para leitura
        Open CaminhoArquivo For Input As Arquivo
        ContadorLinha = 1
        conta = 0
        'Lê o conteúdo do arquivo linha a linha
        Do While Not EOF(Arquivo)
            Line Input #Arquivo, Linha
                                
           TextoArquivo = TextoArquivo & Linha & vbCrLf
               arr(ContadorLinha) = Linha
            Loop
               
        Close Arquivo
         
        Call Ordenamento(arr)
        str = ""
        For i = 1 To 5
        str = str & arr(i) & vbCrLf
        Next i
       

        MsgBox "Antes" & vbCrLf & TextoArquivo
        MsgBox "Depois" & vbCrLf & str
    End Sub



    Sub Ordenamento(arr() As Integer)
        
        Dim Temp As Double
        Dim i As Long
        Dim j As Long
        For j = 2 To UBound(arr)
        Temp = arr(j)
        For i = j - 1 To 1 Step -1
        If (arr(i) <= Temp) Then GoTo 10
        arr(i + 1) = arr(i)
        Next i
        i = 0
    10      arr(i + 1) = Temp
        Next j
        End Sub
    • Editado sidao_40 sexta-feira, 20 de julho de 2012 13:15
    sexta-feira, 20 de julho de 2012 13:09
  • Aqui dentro do while você não estava incrementando a variável "contadorLinha".

     Do While Not EOF(Arquivo)
            Line Input #Arquivo, Linha
                                
           TextoArquivo = TextoArquivo & Linha & vbCrLf             

           arr(ContadorLinha) = Linha   

           ContadorLinha = ContadorLinha + 1
    Loop


    sexta-feira, 20 de julho de 2012 13:16
  • Frank Pinheiro fiz o que vc me indicou, mais continua nao recebendo os dados em vez de receber 1,2,3,4,5,6 fica recebendo 0,0,0,0,0,0,1
    • Editado sidao_40 sexta-feira, 20 de julho de 2012 13:25
    sexta-feira, 20 de julho de 2012 13:25
  • Peguei o código que postou e compilei aqui e está funcionando perfeitamente, você não esta pegando um arquivo errado?

    Seu arquivo teste deve estar desta maneira:

    5

    3

    2

    4

    1

    Cada número em uma linha


    sexta-feira, 20 de julho de 2012 13:34
  • Frank Pinheiro sim ele faz uma leitura linha por linha, essa parte ele funciona, mais eu quero que ele pegue em um array para colocar em ordem crescente  o grande problema esta no arr(ContadorLinha) = Linha    que nao estou conseguindo resolver

    vc pode conferir MsgBox "Depois" & vbCrLf & str


    • Editado sidao_40 sexta-feira, 20 de julho de 2012 13:45
    sexta-feira, 20 de julho de 2012 13:44
  • Como eu disse anteriormente, eu peguei o código que postou e apenas acrescentei a linha:       

    ContadorLinha = ContadorLinha + 1

    Logo após a sua linha:

     arr(ContadorLinha) = Linha 

    Ficando:

    Do While Not EOF(Arquivo)
    	Line Input #Arquivo, Linha
                                
            TextoArquivo = TextoArquivo & Linha & vbCrLf
            arr(ContadorLinha) = Linha
            ContadorLinha = ContadorLinha + 1
    Loop

    E ele está ordenando certinho.

    caso eu retire a linha: ContadorLinha = ContadorLinha + 1 então ele devolve o resultado que você disse 0,0,0,0,(último número lido)

    sexta-feira, 20 de julho de 2012 14:14
  • Frank Pinheiro

    os dados do txt 6,5,4,3,2,1 eu gostaria que ele me retornasse 1,2,3,4,5,6

    sexta-feira, 20 de julho de 2012 15:04
  • consegui depois de muitos teste, ai vai para quem mais precisar

    Dim TextoArquivo, texte As String
    Dim varArray(7) As Integer

        Dim str As String
     
    Private Sub Command1_Click()
        Dim i, conta As Integer
        Dim Arquivo As Integer
        Dim CaminhoArquivo As String
             
        Dim str As String
        
        
        Dim Linha As String
        Dim ContadorLinha As Long
           
     
        'Configura a leitura do arquivo
        Arquivo = FreeFile
        
        
        Arquivo = FreeFile
        CaminhoArquivo = "c:\temp\teste.TXT"
        
        
        'Carrega array com arquivo bruto
        'Abre o arquivo para leitura
        Open CaminhoArquivo For Input As Arquivo
            ContadorLinha = 0
            Do While Not EOF(Arquivo)
                ContadorLinha = ContadorLinha + 1
                Line Input #Arquivo, Linha
                varArray(ContadorLinha) = Linha
            Loop
        Close Arquivo
        
         
         
        'Teste de posicao----------------------------------------------------------
         
         For i = UBound(varArray) - 1 To 1 Step -1
                            MaxVal = varArray(i)
                                    MaxIndex = i
                        
                            For j = 0 To i
                                If varArray(j) > MaxVal Then
                                    MaxVal = varArray(j)
                                    MaxIndex = j
                                End If
                            Next
                        
                            If MaxIndex < i Then
                                varArray(MaxIndex) = varArray(i)
                                varArray(i) = MaxVal
                                                            
                            End If
                        Next
        ''--------------------------------------------------------------------------
        
             str = ""
         For i = 1 To ContadorLinha
             str = str & varArray(i) & vbCrLf
         Next
               
        MsgBox str
    End Sub



     

    • Marcado como Resposta sidao_40 sexta-feira, 20 de julho de 2012 16:59
    sexta-feira, 20 de julho de 2012 16:59
  • não sei se entendi, mas parece que o resultado que a aplicação retorno os valores na ordem inversa, isso?

    Se quiser na ordem contrária basta mudar o sinal de comparação na hora de ordenar.

    mudar de:

      If (arr(i) <= Temp) Then GoTo 10


    para:

      If (arr(i) >= Temp) Then GoTo 10

    Lá no seu procedimento de ordenação

    Sub Ordenamento(arr() As Integer)

    sexta-feira, 20 de julho de 2012 17:08
  • E aqui vai outra dica bem interessante na linha txt pode haver numeros e letras, e ai dará erro, por isso tem que pegar uma referencia da linha como o modo MID para compara com a outra linha de baixo.

    codigo melhorado

    MaxLinha = ""
         
        'Teste de posicao----------------------------------------------------------
         
                        For i = UBound(varArray) - 1 To 1 Step -1
                            MaxVal = Mid(varArray(i), 23, 6)
                            MaxLinha = varArray(i)
                            MaxIndex = i
                        
                            For j = 0 To i
                                If Mid(varArray(j), 23, 6) > MaxVal Then
                                    MaxVal = Mid(varArray(j), 23, 6)
                                    MaxLinha = varArray(j)
                                    MaxIndex = j
                                End If
                            Next
                        
                            If MaxIndex < i Then
                                varArray(MaxIndex) = varArray(i)
                                varArray(i) = MaxLinha
                            End If
                        Next
        ''--------------------------------------------------------------------------
        
             str = ""
         For i = 1 To ContadorLinha
             str = str & varArray(i) & vbCrLf
         Next

    sexta-feira, 20 de julho de 2012 20:56