https://gambas-es.org/showthread.php?tid=454
volendo togliere cio' che non e' numero, e vedendo una riga come
If IsDigit(cadena[n]) Or If cadena[n] = "." Or If cadena[n] = "," Or If cadena[n] = "-" Then sCadena &= cadena[n]
mi sono detto: impossibile non riuscire a ottimizzarla, sicuramente ogni volta ricalcolera' tutte le condizioni, e invece non ci sono riuscito. Allora mi sono messo a scriverlo un po' piu' leggibile
Public Function soloNumeros(cadena As String) As String
Dim n As Integer
Dim res As String = ""
For n = 0 To Len(cadena) - 1
If InStr("0123456789.-", cadena[n]) Then res &= cadena[n]
Next
Return IIf(res = "", "0", res)
End
E ancora si rimaneva sui soliti tempi, leggermente superiori i miei. Poi, e qui viene il curioso secondo me, mi sono accorto che una grossa differenza, invece, viene dall'usare l
'if ... then all'interno del
for tutto su una riga o usarlo su tre con l'endif finale :-) Anche l'IIf sembra non danneggiare, ma quasi avvantaggiare la velocita'. Cosi' mi risulta pero' solo un risparmio del 10% del tempo.
Non so se e' verita' assoluta, pero' dalla decina di prove che ho fatto mi torna in questo modo, usando una serie di stringhe lunghe una 15ina di caratteri e ripetendo parecchie volte la chiamata alla funzione. Di sicuro sono cambiati i compilatori da quando facevo le stesse cose con il Visual Basic.