Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C# / VB.NET - [VB.NET] Funzione ritorna sempre 0
Forum - C# / VB.NET - [VB.NET] Funzione ritorna sempre 0

Avatar
AcitanoX (Normal User)
Newbie


Messaggi: 7
Iscritto: 15/08/2010

Segnala al moderatore
Postato alle 22:43
Mercoledì, 16/11/2011
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?

Codice sorgente - presumibilmente VB.NET

  1. Public Function matchesText(ByVal rtb As Object, ByVal parola As String) As Integer
  2.         Dim inizio As Integer
  3.         Dim posizione As Integer
  4.         Dim matches As Integer
  5.         While inizio <> 0
  6.             posizione = rtb.SelectionStart
  7.             If rtb.SelectionLength > 1 Then
  8.                 posizione = rtb.SelectionStart + 2
  9.             Else
  10.                 posizione = rtb.SelectionStart + 1
  11.             End If
  12.             inizio = InStr(posizione, rtb.Text, parola)
  13.             matches += 1
  14.         End While
  15.         Return matches
  16.         Return Nothing
  17.     End Function


Ultima modifica effettuata da Il Totem il 17/11/2011 alle 12:05
PM
Avatar
VMikle (Ex-Member)
Rookie


Messaggi: 52
Iscritto: 14/09/2011

Up
2
Down
V
Segnala al moderatore
Postato alle 23:45
Mercoledì, 16/11/2011
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
Codice sorgente - presumibilmente Plain Text

  1. System.Text.RegularExpressions.Regex.Matches("asd asd ciao asd ciao asd ciao asd", "asd").Count 'restituisce 5


Ultima modifica effettuata da VMikle il 16/11/2011 alle 23:46
VMikle ti tingraziamo x aver fornito supporto ma pls leggi il regolamento. I topic con un titolo nn adeguato al contenuto nn viene dato supporto ms chiuso e fatto riaprire con il titolo giusto - Thejuster - 17/11/11 08:42
Perché il titolo sarebbe non adeguato? - VMikle - 17/11/11 17:30


Perennemente svogliato :/
PM