• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

axpppp

load de ficheiro txt para uma matriz

9 mensagens neste tópico

boas

o ficheiro txt tem isto la dentro

20202020202020202020
20202020202020202020
20202020202020202020
20202020202020202020
20202020202020202020
20202020202020202020
20202020202020202020
20202020202020202020
20202020202020202020
20202020202020202020
20202020202020202020
20202020202020202020
20202020202020202020
20202020202020202020
20202020202020202020
20202020202020202020
20202020202020202020
20202020202020202020
20202020202020202020
20202020202020202020

Dim Lista As New ArrayList
        Dim Leitor As New StreamReader("C:\Documents and Settings\axpp\Ambiente de trabalho\pap@bomberman\pap\Resources\TextFile1.txt")

        Do While Leitor.Peek() >= 0

            Dim Linha As String = Leitor.Read

            For Each posicao As Char In Linha



            Next

        Loop

eu andei a ver um topico daqui do forum http://www.portugal-a-programar.pt/index.php?showtopic=191 e cheguei a conclusao que deve ser assim que tenho que fazer....mas agora o que me mete confusao é como fazer o load dos valores para as posiçoes da matriz... :wallbash:

cumpz

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Esse formato é constante?

Quero dizer, tem sempre o mesmo número de caracteres na horizontal?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

sim....tenho 20 posiçoes na horizontal e 20 posiçoes na vertical...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Uma solução sapateira.

Há maneiras de conseguir o mesmo apenas com uma leitura de ficheiro.

Foi o que saiu no momento, estou um pouco ocupado. :biggrin:

Num projecto novo, adiciona um button e substituí todo o código, para veres a funcionar antes de analisar, por este:

Public Class Form1

    Dim Matriz(0, 0) As Integer

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim ofd As New OpenFileDialog

        ofd.ShowDialog()

        'vamos abrir o ficheiro a primeira vez apenas para determinar os alcances
        Dim Prep As New IO.StreamReader(ofd.FileName)

        'alcance horizontal
        Dim Elem1 As Integer = (Prep.ReadLine.Trim.Length) - 1
        Dim Elem2 As Integer = 0

        While Not Prep.EndOfStream
            Prep.ReadLine()
            'alcance vertical
            Elem2 += 1
        End While

        'redeclaramos a matriz com os novos alcances
        ReDim Matriz(Elem1, Elem2)

        Elem2 = 0
        Prep.Close()

        'por fim, abrimos de novo o ficheiro para ler os valores
        Dim SR As New IO.StreamReader(ofd.FileName)

        While Not SR.EndOfStream
            Dim Linha As String = SR.ReadLine

            'envia para o sub, o alcance horizontal, a actual linha e o texto dessa linha
            PreencheMatriz(Elem1, Elem2, Linha)
            Elem2 += 1
        End While

        SR.Close()


    End Sub

    Private Sub PreencheMatriz(ByVal Elem1 As Integer, ByVal elem2 As Integer, ByVal Linha As String)
        'percorre toda a linha, na matriz e vai buscar os valores à linha lida do ficheiro
        For i As Integer = 0 To Elem1
            Matriz(i, elem2) = CInt(Strings.Mid(Linha, i + 1, 1))
        Next
    End Sub
End Class

Com isto, ele detecta automáticamente o formato e mete-te um caractere por posição.

Dizes que o formato é sempre o mesmo, e isso torna as coisas mais fáceis e muito mais pequenas.

Public Class Form1

    Dim Matriz(19, 19) As Integer

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

        Dim ofd As New OpenFileDialog

        ofd.ShowDialog()

        Dim X As Integer = -1
        Dim Y As Integer = -1
        Dim SR As New IO.StreamReader(ofd.FileName)

        While Not SR.EndOfStream
            Y += 1
            Dim L() As Char = SR.ReadLine.ToCharArray

            For Each C As Char In L
                X += 1
                Matriz(X, Y) = C.ToString
            Next
            X = -1
        End While

        SR.Close()
    End Sub

End Class

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

mas tipo há maneira de fazer isso sem ter que ir buscar o ficheiro .txt???

tipo ter o ficheiro nas ressources e o programa ir logo buscar directo?

o resto tive a analisar e acho que é assim  :(

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Claro.

Ao invés de usares um openfiledialog, referes-te directamente ao ficheiro na solução ou coisa parecida.

Mostrei-te com openfiledialog para generalizar as coisas.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

pois mas quais é que existem alem do openfiledialog??

isso é o que eu nao sei

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não precisas do openfiledialog nem nada do género.

No streamreader dás directamente o ficheiro ou stream.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora