Jump to content
Sign in to follow this  
programadorvb6

Como obter valor boolean correcto da função

Recommended Posts

programadorvb6

Olá boa noite.

Fiz esta função para pesquisar se um determinado string contém alguma palavra contida no ficheiro txt, devolvendo-me o valor (True => Sai do ciclo caso encontre /False=> Continua a procurar até ao fim do ficheiro.)

Nota : essa mesma função serve-se dos dados do ficheiro Links.txt, verificando se esses mesmos dados do txt estão contidos no string.

'/=================================

O ficheiro Links.txt contém  os seguintes dados:

'/=================================

http://www.megaupload.com/?d=29;37

http://www.fileserve.com/file/30:37

A Função é esta :

Public Class Funcoes
Public Shared Function Procura_Link(ByVal Ficheiro As String, ByVal Link_Original As String) As Boolean

        Dim SR As New IO.StreamReader(Ficheiro.ToString)
        Dim LinksProcurados As String = SR.ReadToEnd
        SR.Close()
            For Each Linha As String In LinksProcurados.Split(vbLf)
                Dim Elementos As String() = Linha.Split(";")
                Dim r As Integer = Link_Original.ToString.IndexOf(Elementos(0).ToString)
                If r > 0 Then
                    Procura_Link = True
                    Exit Function
                End If
            Next
    End Function
End Class
 

Para Verificar :

Private Sub Button6_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button6.Click
        Dim Texto as String="http://www.megaupload.com/?d=XDI6457S?/knil/rb.moc.snwodlisarb.www//:ptth"
     If Funcoes.Procura_Link(Application.StartupPath & "\Links.txt", Texto) = True Then
        Msgbox("Encontrado!")    
        End If
        If Funcoes.Procura_Link(Application.StartupPath & "\Links.txt", texto) = False Then
            MsgBox("Não Encontrado !")
        End If
    End Sub
O problema é que a função que está contida na classe Funções, só devolve o valor=False.

Grato desde já pela vossa paciência.

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
bioshock

Começa a utilizar o GeSHi relativo ao VB.NET :(

Olhando agora para o problema, a tua função será isto:

Public Shared Function Procura_Link(ByVal Ficheiro As String, ByVal Link_Original As String) As Boolean

        Dim SR As New IO.StreamReader(Ficheiro.ToString)
        Dim LinksProcurados As String = SR.ReadToEnd
        SR.Close()
            For Each Linha As String In LinksProcurados.Split(vbLf)
                Dim Elementos As String() = Linha.Split(";")
                Dim r As Integer = Link_Original.ToString.IndexOf(Elementos(0).ToString)
                If r > 0 Then
                    Return True
                    Exit Function
                End If
            Next
    End Function
End Class

Depois, para verificares basta-te:

Private Sub Button6_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button6.Click
        Dim Texto as String="http://www.megaupload.com/?d=XDI6457S?/knil/rb.moc.snwodlisarb.www//:ptth"
     If Funcoes.Procura_Link(Application.StartupPath & "\Links.txt", Texto) Then
        Msgbox("Encontrado!")    
     Else
        Msgbox("Not found")
     End If

       

Share this post


Link to post
Share on other sites
thoga31

Um suma, em vez de Procura_Link = True fazes Return True, pois a função deve devolver um valor, ou seja, fazer o Return - é a palavra reservada que o faz. :(


Knowledge is free!

Share this post


Link to post
Share on other sites
programadorvb6

Olá bioshock

A função : 'Procura_Link' doesn't return a value on all code paths. Are you missing a 'Return' statement? dá-me este erro, mas já indicou o valor em cima.

O que será desta vez?


______________________________________________________________________________

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

Esse aviso aparece quando a função corre o risco de não retornar nada, tenta assim

Public Class Funcoes
    Public Shared Function Procura_Link(ByVal Ficheiro As String, ByVal Link_Original As String) As Boolean

        Dim SR As New IO.StreamReader(Ficheiro.ToString)
        Dim LinksProcurados As String = SR.ReadToEnd
        SR.Close()
            For Each Linha As String In LinksProcurados.Split(vbLf)
                Dim Elementos As String() = Linha.Split(";")
                Dim r As Integer = Link_Original.ToString.IndexOf(Elementos(0).ToString)
                If r > 0 Then
                    Return True
                End If
            Next
            Return False
    End Function
End Class


Pedro Martins

Não respondo a duvidas por PM

Share this post


Link to post
Share on other sites
programadorvb6

Olá caça.

Obrigado desde já pela ajuda.

Mas também me retornava com sendo = False.

Fiz assim :

Public Shared Function Procura_Link(ByVal Ficheiro As String, ByVal Link_Original As String) As Boolean

        Dim SR As New IO.StreamReader(Ficheiro.ToString)
        Dim LinksProcurados As String = SR.ReadToEnd
        SR.Close()
        For Each Linha As String In LinksProcurados.Split(vbLf)
            Dim Elementos As String() = Linha.Split(";")
            ' Dim r As Integer = Link_Original.ToString.IndexOf(Elementos(0).ToString)
            'If r > 0 Then
            If InStr(Link_Original.ToString, Elementos(0).ToString) > 0 Then
                Return True
                Exit Function
            End If
        Next
        Return False
    End Function

Obrigado a todos


______________________________________________________________________________

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
thoga31

Após 720 posts, aconselho a utilização das tags code para vb.net.

É certo que devolvia False, mas na realidade não havia nenhum Return, logo esse False é algo "falsificado".

Uma função deve sempre terminar com um Return no fim para evitar essa chamada de atenção, e também garante que a função devolve algo caso ocorra uma falha qualquer não prevista.

Quando se tem mesmo a certeza que a função vai retornar algo nas declarações anteriores, podes terminar com um Return Nothing mesmo só para "calar" o compilador, apesar de não ser aconselhado fazê-lo.


Knowledge is free!

Share this post


Link to post
Share on other sites
Caça

E tambem isto é escusado

Return True
Exit Function

basta isto

Return True

Quando existe algum retorno a função para logo ali, mesmo que tenha código a seguir(excepto dentro dum Try Catch Filnaly, em que o código que está dentro do Filnaly é sempre executado)


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
Sign in to follow this  

×
×
  • 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.