Oppure

Loading
16/11/11 21:43
AcitanoX
Allora ho questa funzione scritta da me, però ritorna sempre 0, serve per individuare tutte le corrispondenze con una determinata parola in un determinato testo.

rtb = un RichTextBox
parola = asd

il testo è formato da:

asd asd ciao asd ciao asd ciao asd

Invece di ritornare 5 la funzione ritorna 0, mi riuscite a individuare l'errore?

Public Function matchesText(ByVal rtb As Object, ByVal parola As String) As Integer
        Dim inizio As Integer
        Dim posizione As Integer
        Dim matches As Integer
        While inizio <> 0
            posizione = rtb.SelectionStart
            If rtb.SelectionLength > 1 Then
                posizione = rtb.SelectionStart + 2
            Else
                posizione = rtb.SelectionStart + 1
            End If
            inizio = InStr(posizione, rtb.Text, parola)
            matches += 1
        End While
        Return matches
        Return Nothing
    End Function
Ultima modifica effettuata da Il Totem 17/11/11 11:05
aaa
16/11/11 22:45
VMikle
Ciao,
il tuo approccio è sbagliato per diversi aspetti:
- il ciclo While non inizierà mai perché una variabile Integer viene inizializzata a 0 quindi inizio <> 0 è impossibile, per risolvere potresi usare alternative quali Do Loop While o Do Until Loop;
- se proprio non vuoi passare direttamente la stringa da analizzare considera il dichiarare il parametro rtb come RichTextBox e non Object, in questo modo eviti upcasting superflui;
- il Return Nothing finale è inutile perché non avrà mai possibilità di esecuzione;
- l'utilizzo di istruzioni vb6 se non strettamente necessario è una brutta abitudine in .NET

Inoltre esistono soluzioni più semplici, ad esempio
System.Text.RegularExpressions.Regex.Matches("asd asd ciao asd ciao asd ciao asd", "asd").Count 'restituisce 5
Ultima modifica effettuata da VMikle 16/11/11 22:46
aaa