Usuário com melhor resposta
Dados txt em um array

Pergunta
-
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
Todas as Respostas
-
Tenho alguns links que vão te ajudar.
http://www.macoratti.net/vb_arrtb.htm
http://patorjk.com/programming/tutorials/vbarrays.htm
http://pt.scribd.com/doc/45650062/Vetores-e-Matrizes-No-Visual-Basic
-
Obrigado Frank Pinheiro
Mais ainda continuo com o mesma dilema
-
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
-
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
-
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 & vbCrLfarr(ContadorLinha) = Linha
ContadorLinha = ContadorLinha + 1
Loop- Editado Frank Pinheiro sexta-feira, 20 de julho de 2012 13:22
-
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
-
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
- Editado Frank Pinheiro sexta-feira, 20 de julho de 2012 13:37
-
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
-
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)
-
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
-
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)
- Editado Frank Pinheiro sexta-feira, 20 de julho de 2012 17:09
-
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