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

Sir Pereira

[RESOLVIDO] Erros?

8 mensagens neste tópico

Pessoal, talvez me possam ajudar aqui:

    Private Sub ltblicoesBiologia_SelectedValueChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles ltblicoesBiologia.SelectedValueChanged
        dim fich As String In IO.Directory.GetFiles("c:\", "*biologia*", IO.SearchOption.TopDirectoryOnly)
        Dim xreader As New StreamReader(fich)
        ltblicoesBiologia.Text = xreader.ReadLine()
        xreader.Close()
    End Sub

E aparecem-me estes erros:

Error 1 End of statement expected. C:\Documents and Settings\Ivo Pereira\Os meus documentos\Visual Studio 2008\Projects\e-Caderno\e-Caderno\Biologia.vb 45 28 e-Caderno

Error 2 Name 'fich' is not declared. C:\Documents and Settings\Ivo Pereira\Os meus documentos\Visual Studio 2008\Projects\e-Caderno\e-Caderno\Biologia.vb 46 41 e-Caderno

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Bom o problema eh o seguinte, tu pegaste na funçao do for each, na outra thread e tentaste adaptar, mas acho k estás a fazer tudo errado.

(Desculpa :))

Então é assim, quando o valor é mudado na listbox tu keres k ele procure o ficheiro k tem biologia no nome, bem, mas que ficheiro é esse se houver mais que um?

Acho k a parte de adicionar os valores ah listbox, ja foi resolvida com o código

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        For Each fich As String In IO.Directory.GetFiles("c:\", "*biologia*", IO.SearchOption.TopDirectoryOnly)
            Me.ListBox1.Items.Add(fich)
        Next
    End Sub

Então pra abrires o ficheiro quando a selecção muda porque é que vais procurar o ficheiro outra vez?

Não vai encontrar nada, e mesmo que encontre vai ser o 1º ficheiro com essa palavra, então se o objectivo é abrir o ficheiro seleccionado a solução é

    Private Sub ListBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ListBox1.SelectedIndexChanged
        Dim sr As New System.IO.StreamReader(ListBox1.SelectedItem.ToString)
        TextBox1.Text = sr.ReadToEnd()
        sr.Close()
    End Sub

No teu código, mesmo que funciona-se só ias ler a primeira linha e nunca o texto todo.

Cumpz

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Eu sei que só iria ler a primeira linha Cybernavigator, mas é assim, eu tenho o .txt estruturado para ser qualquer coisa como isto:

Lições 1 e 2
-
21-01-2008
-
Sumário
Apresentação aos alunos
-
Tema I
Ola tudo bem?

e queria que por exemplo na textbox tbLicoes aparecesse Lições 1 e 2, na tblSumario aparecesse o Sumario Apresentação de Alunos, rtbConteudo

Tema I

Ola tudo bem?

nao sei se percebes-te... mas eu tava a tentar fazer isto por etapas :) se me conseguires ajudar agora aqui agradecia muito :)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ok, percebi, fazes isso com split.

Este foi o meu código.

Public Class Form1
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        For Each fich As String In IO.Directory.GetFiles("c:\", "*biologia*", IO.SearchOption.TopDirectoryOnly)
            Me.ListBox1.Items.Add(fich)
        Next

    End Sub
    Private Sub ListBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ListBox1.SelectedIndexChanged
        Dim sr As New System.IO.StreamReader(ListBox1.SelectedItem.ToString)
        Dim textread As String = sr.ReadToEnd
        Dim line() = textread.Split(vbNewLine)
        tbLicoes.Text = line(0).ToString.Replace(vbNewLine, "")
        Dim i
        For i = 4 To 5
            tblSumario.Text += line(i).ToString.Remove(0, 1) & ": "
            If i = 5 Then
                tblSumario.Text = tblSumario.Text.Remove(tblSumario.Text.Length - 2, 2)
            End If
        Next
        For i = 7 To line.Length - 1
            rtbconteudo.Text += line(i).ToString
            If i = 7 Then
                rtbconteudo.Text = rtbconteudo.Text.Remove(0, 1)
            End If
        Next
    End Sub
End Class

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Bem, estive a pensar e acho que a maneira em cima é um bocado limitada. Deixo aqui outra forma de fazer isto, um pouco mais sofisticada, e já permite que tenhas mais que um sumario.

Talvez seja um bocado complicado de uma vez que não meti comentários, qualquer duvida pergunta

    Private Sub ListBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ListBox1.SelectedIndexChanged
        Dim fs As System.IO.FileStream = New System.IO.FileStream(ListBox1.SelectedItem.ToString, IO.FileMode.Open, IO.FileAccess.Read)
        Dim fs2 As System.IO.FileStream = New System.IO.FileStream(ListBox1.SelectedItem.ToString, IO.FileMode.Open, IO.FileAccess.Read)
        Dim sr As System.IO.StreamReader = New System.IO.StreamReader(fs)
        Dim i As Integer = 0
        Dim counter As Integer = 0
        Dim line As String = sr.Readline()
        Dim lines() As String
        While Not line Is Nothing
            line = sr.ReadLine
            counter += 1
        End While
        sr.Close()
        fs.Close()
        ReDim lines(counter - 1)
        Dim sr2 As System.IO.StreamReader = New System.IO.StreamReader(fs2)
        For i = 0 To counter - 1
            line = sr2.ReadLine
            lines(i) = line
        Next
        sr2.Close()
        i = 0
        While lines(i) <> "-"
            tbLicoes.Text += lines(i).ToString
            i += 1
        End While
        i += 1
        While lines(i) <> "-"
            tbData.Text += lines(i).ToString
            i += 1
        End While
        i += 1
        While lines(i) <> "-"
            tblSumario.Text += lines(i).ToString & " "
            i += 1
        End While
        i += 1
        tblSumario.Text = tblSumario.Text.Remove(tblSumario.Text.Length - 1, 1)
        While i < counter
            rtbConteudo.Text += lines(i).ToString & vbNewLine
            i += 1
        End While
        rtbConteudo.Text = rtbConteudo.Text.Remove(rtbConteudo.Text.Length - 2, 2)
    End Sub

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Hmm... deu muito jeito, mas, eu no código anterior, tenha mudado para aparecer na listbox o nome das lições, e se aparecer o nome das lições nao dá para abrir o ficheiro e preencher os campos, pois aquilo vai procurar no item da listbox, que é o nome das lições.

Portanto, gostava que me ajudasses a encontrar uma alternativa, ou alguma modificação no código que me permitisse fazer isso, e outra coisa, por exemplo, se eu já tivesse de origem alguma coisa posta nos outros campos (rtbConteudo, tbSumario, etc), isso apenas lhe acrescentava, eu queria que pussesse tudo limpo antes de acrescentar.. Acho que já estou a pedir demais mas prontos :-[

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Public Class Form1
    Dim locations As New Collection

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        For Each fich As String In IO.Directory.GetFiles("c:\", "*biologia*", IO.SearchOption.TopDirectoryOnly)
            Me.ListBox1.Items.Add(fich)
            locations.Add(fich)
        Next
    End Sub

    Private Sub ListBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ListBox1.SelectedIndexChanged
        tbLicoes.Text = ""
        tbData.Text = ""
        rtbConteudo.Text = ""
        tblSumario.Text = ""
        Dim fs As System.IO.FileStream = New System.IO.FileStream(locations.Item(ListBox1.SelectedIndex + 1), IO.FileMode.Open, IO.FileAccess.Read)
        Dim fs2 As System.IO.FileStream = New System.IO.FileStream(locations.Item(ListBox1.SelectedIndex + 1), IO.FileMode.Open, IO.FileAccess.Read)
        Dim sr As System.IO.StreamReader = New System.IO.StreamReader(fs)
        Dim i As Integer = 0
        Dim counter As Integer = 0
        Dim line As String = sr.ReadLine()
        Dim lines() As String
        While Not line Is Nothing
            line = sr.ReadLine
            counter += 1
        End While
        sr.Close()
        fs.Close()
        ReDim lines(counter - 1)
        Dim sr2 As System.IO.StreamReader = New System.IO.StreamReader(fs2)
        For i = 0 To counter - 1
            line = sr2.ReadLine
            lines(i) = line
        Next
        sr2.Close()
        i = 0
        While lines(i) <> "-"
            tbLicoes.Text += lines(i).ToString
            i += 1
        End While
        i += 1
        While lines(i) <> "-"
            tbData.Text += lines(i).ToString
            i += 1
        End While
        i += 1
        While lines(i) <> "-"
            tblSumario.Text += lines(i).ToString & " "
            i += 1
        End While
        i += 1
        tblSumario.Text = tblSumario.Text.Remove(tblSumario.Text.Length - 1, 1)
        While i < counter
            rtbConteudo.Text += lines(i).ToString & vbNewLine
            i += 1
        End While
        rtbConteudo.Text = rtbConteudo.Text.Remove(rtbConteudo.Text.Length - 2, 2)
    End Sub

End Class

É assim, eu não sei como fizeste o outro código, mas desta maneira já limpa os valores, mas o nome do ficheiro aparece na mesma, de qualquer maneira, a localização dele vai ser buscada à colecção e não ao nome que aparece na listbox. :P

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