Autore Topic: Funzione per contare le sottostringhe  (Letto 254 volte)

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.114
  • Tonno verde
    • Mostra profilo
Funzione per contare le sottostringhe
« il: 13 Settembre 2017, 13:58:51 »
Sulla ML di Gambas è apparsa questa domanda, io non credo esista una funzione nativa di Gambas e ho suggerito di farsene una da soli ad esempio:
Codice: [Seleziona]
Private Function CountSubString(value As String, pattern As String, Optional compare As Integer) As Integer '' compare default Sensitive, 1 = Insensitive

  Dim i, n As Integer

  While i <= Len(value)
    i = InStr(value, pattern, i + 1, compare)
    If i = 0 Then Break
    Inc n
  Wend
  Return n

End

Qualche idea migliore?

 :ciao:

P.S. Private solo se inserita nello stesso modulo, naturalmente.  :)
« Ultima modifica: 13 Settembre 2017, 14:03:29 da Gianluigi »
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.179
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:Funzione per contare le sottostringhe
« Risposta #1 il: 14 Settembre 2017, 04:12:34 »
Per ora raffinerei il precedente tuo codice così:

Codice: [Seleziona]
Private Function CountSubString(value As String, pattern As String, Optional compare As Integer) As Integer '' compare default Sensitive, 1 = Insensitive

  Dim i, n As Integer

  Do     ' ...ὁ ἄπειρος κύκλος !

    i = InStr(value, pattern, i + 1, compare)
    If i = 0 Then Break
    Inc n

  Loop

  Return n

End
« Ultima modifica: 14 Settembre 2017, 04:13:13 da vuott »
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.114
  • Tonno verde
    • Mostra profilo
Re:Funzione per contare le sottostringhe
« Risposta #2 il: 14 Settembre 2017, 13:39:29 »
Per ora raffinerei il precedente tuo codice così:

Ottimo, avevo già notato che ad esempio non serviva l'uguale nella prima valutazione ma non mi si era accesa nessuna lampadina.
Avrei dovuto rendermi conto che la seconda valutazione era sufficiente :ok:
Credo che questa sia la soluzione migliore "via Gambas", altrimenti per quale motivo Minisini avrebbe introdotto nella funzione InStr la possibilità di variare l'inizio...
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro