Jump to content
programadorvb6

Como carregar uma ComboBox apartir de um txt

Recommended Posts

programadorvb6

Olá pessoal.

Estou com um problema em carregar uma ComboBox apartir de um ficheiro Txt.

Deixo aqui o código para que me possam ajudar :

Imports System.IO
Public Class AberturaSite 
  ''' <summary>
    ''' Função para indicar onde se encontra a aplicação do utilizador   
    ''' </summary>
    ''' <remarks></remarks>
    
Public Function GetAppPath() As String
        Dim i As Integer
        Dim strAppPath As String
        strAppPath = System.Reflection.Assembly.GetExecutingAssembly.Location()
        i = strAppPath.Length - 1
        Do Until strAppPath.Substring(i, 1) = "\"
            i = i - 1
        Loop
        strAppPath = strAppPath.Substring(0, i)
        Return strAppPath
    End Function


'Caregar uma ComboBox
    'Usar : CarregarTopicos(< Nome da ComboBox,< Nome do Arquivo Txt >)
    Public Sub CarregarTopicos(ByRef combo As System.Object, ByRef Nome_Ficheiro As String)
        Try
            'Redirecciona pela Função : GetAppPath ; indicando o caminho onde se encontra o arquivo Txt
            Dim Caminho As String = GetAppPath & "\" & Nome_Ficheiro
            Dim stream_reader As New IO.StreamReader(Caminho, System.Text.Encoding.Default) 'Lê o texto e configura-o para : Encodig(default)
            Dim Ler_LinhaStr As String
            Dim Linhas As ULong
            Linhas = 0
            Ler_LinhaStr = stream_reader.ReadLine()
            Do While Not stream_reader.EndOfStream
                If Linhas > 0 Then 'Passa a 1º Linha
                    combo.Items.Add(Ler_LinhaStr)
                End If
                Ler_LinhaStr = stream_reader.ReadLine() 'Lê  conteúdo da Linha seguinte
                Linhas += 1 'Incrmenta Linha
            Loop
            If stream_reader.EndOfStream = True Then
                stream_reader.Close() 'Fecha abertura de arquivo quando terminado a sua leitura.
                Exit Sub
            End If
        Catch exc As Exception
            ' Reporta erros se existirem
            MsgBox(exc.Message, MsgBoxStyle.Exclamation, "Erro ao abrir o ficheiro.")
        End Try

    End Sub

End Class  

Conteúdo do Arquivo : topicos.txt

GERAL - NOTÍCIAS

Fotografia

História e Património

Literatura

Coro de Câmara de Montargil

Artesanato (Novo)

Mercearia de Montargil

Pintura

GymnArt

Astronomia

Ciência e Novas Tecnologias

Eco-Lazer

Futebol

Outras Actividades

Tá-se Bem!

Tá-se Mal!

Ofertas

Pesca Desportiva e de Lazer

Fiz a rotina : [ CarregarTopicos] para carregar para uma ComboBox o texto que se encontra no arquivo : topicos.txt ; menos a 1º linha que não pode ser = a : GERAL - NOTICIAS  ; e o que me está a acontecer agora é que a rotina não lê a última linha := Pesca Desportiva e de Lazer

Alguém faz ideia do que pode ser ?

Grato desde já pela vossa atenção.

Atentamente.

ProgramadorVB6


______________________________________________________________________________

Que minha coragem seja maior que meu medo e que minha força seja tão grande quanto minha fé.
 

Share this post


Link to post
Share on other sites
Caça

Ler, lê. Tu é que não estás a colocar essa ultima linha na combo.


Pedro Martins

Não respondo a duvidas por PM

Share this post


Link to post
Share on other sites
programadorvb6

Ok , vamos ver se entendi:

Quando fecha a Leitura do ficheiro a última linha fica retida, teremos que adiciona-la a qundo o indicador : EndOfStream = True .

If stream_reader.EndOfStream = True Then
                combo.Items.Add(Ler_LinhaStr)
                stream_reader.Close() 'Fecha abertura de arquivo quando terminado a sua leitura.
                Exit Sub
            End If

Nota : esta rotina poderia ser feita de modo a torna-la mais ágil?

Se sim como a poderia fazer?

Grato desde já pela sua atenção.

Atentamente.

Programadorvb6


______________________________________________________________________________

Que minha coragem seja maior que meu medo e que minha força seja tão grande quanto minha fé.
 

Share this post


Link to post
Share on other sites
Caça

            Do While Not stream_reader.EndOfStream
                If Linhas > 0 Then 'Passa a 1º Linha
                    combo.Items.Add(Ler_LinhaStr)
                End If
                Ler_LinhaStr = stream_reader.ReadLine() 'Lê  conteúdo da Linha seguinte
                Linhas += 1 'Incrmenta Linha
            Loop

Onde é que estás a meter o ultimo item? não estás a meter.

Tenta assim

    Public Sub CarregarTopicos(ByRef combo As System.Object, ByRef Nome_Ficheiro As String)
        Try
            'Redirecciona pela Função : GetAppPath ; indicando o caminho onde se encontra o arquivo Txt
            Dim Caminho As String = My.Application.Info.DirectoryPath & "\" & Nome_Ficheiro
            Dim stream_reader As New IO.StreamReader(Caminho, System.Text.Encoding.Default) 'Lê o texto e configura-o para : Encodig(default)
            Do While Not stream_reader.EndOfStream
                combo.Items.Add(stream_reader.ReadLine())
            Loop
            stream_reader.Close() 'Fecha abertura de arquivo quando terminado a sua leitura.
        Catch exc As Exception
            ' Reporta erros se existirem
            MsgBox(exc.Message, MsgBoxStyle.Exclamation, "Erro ao abrir o ficheiro.")
        End Try
    End Sub


Pedro Martins

Não respondo a duvidas por PM

Share this post


Link to post
Share on other sites
programadorvb6

Olá Pedro.

Isso era para carregar todo o conteudo de  um ficheiro txt em uma ComboBox e o que necessito é que o carregamento do mesmo não contenha o item "GERAL - NOTÍCIAS"


______________________________________________________________________________

Que minha coragem seja maior que meu medo e que minha força seja tão grande quanto minha fé.
 

Share this post


Link to post
Share on other sites
ribeiro55

Ao que o Caça te indicou acrescenta só

stream_reader.ReadLine()

imediatamente antes do "Do While Not ....":

            stream_reader.ReadLine()
            Do While Not stream_reader.EndOfStream
                combo.Items.Add(stream_reader.ReadLine())
            Loop

Para que consumas a primeira linha para o infinito e mais além (como indicas que queres), e comeces a malhar as seguintes.

O teu algoritmo não lê a última linha porque só estás a ler a linha para a variável depois de fazer add, fiando que o ciclo volta lá em cima.

Ora, no último item, lês a linha para a variável, mas o ciclo já não volta lá em cima.


Sérgio Ribeiro


"Great coders aren't born. They're compiled and released"
"Expert coders do not need a keyboard. They just throw magnets at the RAM chips"

Share this post


Link to post
Share on other sites
bioshock

Um pequeno aparte: @Caça, cuidado com a seguinte linha:

Dim Caminho As String = My.Application.Info.DirectoryPath & "\" & Nome_Ficheiro

A função DirectoryPath nem sempre resulta em todos os computadores (já tive problemas semelhantes).

É preferível utilizar:

Dim Caminho As String = Application.StartupPath & "\" & Nome_Ficheiro

Share this post


Link to post
Share on other sites
Caça

Obrigado, mas isso nunca me tinha acontecido.

:)


Pedro Martins

Não respondo a duvidas por PM

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.