Autore Topic: [risolto[...]]esiste una funzione che cerca un crt all'interno di una stringa  (Letto 5115 volte)

Offline simo97

  • Gran Maestro dei Gamberi
  • *****
  • Post: 501
    • Mostra profilo
quante risposte....

lo scopo finale era una funzione di trasformazione "controllata" da una text a una value ma con le caratteristiche di una text e controllata perchè:
-usa il puntino al posto della virgola e se viene insetrita la virgola inserisce comunque il puntino
-può supportare anche le lettere se inserite dal programma ma non da chi lo usa(un controllo che annulla la funzione)

-se mi invento qualcosaltrto alla fine pubblicherò qui la funzione completa...

bè se volete tolgo il risolto ma lo scopo di questa discussione (un pò evoluto) alla fine è stato risolto...
;D

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.723
  • Ne mors quidem nos iunget
    • Mostra profilo

bè se volete tolgo il risolto ma lo scopo di questa discussione (un pò evoluto) alla fine è stato risolto...

Lo stato di Risolto, e sue modifiche, puoi deciderlo solo tu, ovviamente.  :-\
« 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 simo97

  • Gran Maestro dei Gamberi
  • *****
  • Post: 501
    • Mostra profilo
meglio??? ;D ;D
;D

Offline Picavbg

  • Senatore Gambero
  • ******
  • Post: 1.620
    • Mostra profilo
lo scopo finale era una funzione di trasformazione "controllata" da una text a una value ma con le caratteristiche di una text e controllata perchè:
-usa il puntino al posto della virgola e se viene insetrita la virgola inserisce comunque il puntino
-può supportare anche le lettere se inserite dal programma ma non da chi lo usa(un controllo che annulla la funzione)

-se mi invento qualcosaltrto alla fine pubblicherò qui la funzione completa...

bè se volete tolgo il risolto ma lo scopo di questa discussione (un pò evoluto) alla fine è stato risolto...
Scusami, ma continuo a non capirti. Il tuo intento porta ad azioni diverse:
1a- trascurare tutti i caratteri diversi dalla virgola, dal punto e dai numeri.
              E questo ti conviene farlo come ti avevo suggerito, cioè con l'evento TextBox.KeyPress, perchè è la via più semplice, più leggera perchè risparmi istruzioni e sbrigativa. Lo stesso evento può controllare che venga immesso un solo "." o una sola "," e trascurare tutti quelli successivi al prmo.
2a- la scrittura di una funzione che si occupi della conversione dell'eventuale crt "," in ".". Sono istruzioni che non si possono risparmiare perchè il crt immesso può essere, in KeyPress, soltanto controllato ed eventaulmente scartato, ma non può essere convertito in un crt diverso.
Secondo me la funzione non deve essere richiamata, ma semplicemente inserita come istruzioni dentro l'evetnto TextBox.Change, cioè subito dopo che il crt digitato è stato già aggiunto ai precedenti, già presenti nella TextBox.
3a- una funzione specifica che si occupi dell'inserimento di crt alfabetici, secondo le tue necessità.

Spero di essere stato più chiaro. Non capisco perchè vuoi costruire a tutti i costi una funzione per gestire tutto quando non ne hai bisogno. Ricorda:
Meno codice scrivi, ... meno sbagli.  ;)

Poi, se proprio non vuoi sentire ragioni, perchè hai simpatizzi per la superfunzione, fai come credi. Non posso che augurarti un buon  :rolleyes:
 ;D  :ciao:
:ciao:

Offline simo97

  • Gran Maestro dei Gamberi
  • *****
  • Post: 501
    • Mostra profilo
bè da quello che hai scritto qualcosa hai capito ;D ;D ;D

apparte gli scherzi lo scopo finale era quello...

con l'evento keypress si può inserire solo quello che si può digitare (tipo la funzione di vuott che ho pugglicato quache giorno fa...) escludendo il resto??

nella tua funzione
Codice: [Seleziona]
$Como = Key.Text  
Select Case $Como 
             Case "a" to "z", "A" to "Z",".", ",", ecc..... 
                   Stop Event 
End Select 

$como è una variabile??

ora provo a modificarla un pò..
;D

Offline simo97

  • Gran Maestro dei Gamberi
  • *****
  • Post: 501
    • Mostra profilo
con questa ho quello che voglio ma no trascura acuni caratteri (èòàùì....) ma la funzione dice "tutto ciò che non è nell'intervallo" (ca.) e perciò dovrebbero essere presenti anche quei caratteri...

Codice: gambas [Seleziona]
Public Function Filtro()  
 If key.Text Like "[^0-9.,-]" Then
   Stop Event
 Endif
End


ora la domanda si compone da sola...
come faccio a escludere anche quei caratteri???
;D

Offline Picavbg

  • Senatore Gambero
  • ******
  • Post: 1.620
    • Mostra profilo

$como è una variabile??
Si, è una variabile String

Citazione da: simo97
con questa ho quello che voglio ma no trascura acuni caratteri (èòàùì....) ma la funzione dice "tutto ciò che non è nell'intervallo" (ca.) e perciò dovrebbero essere presenti anche quei caratteri...
Codice: gambas [Seleziona]
Public Function Filtro()  
 If key.Text Like "[^0-9.,-]" Then
   Stop Event
 Endif
End


ora la domanda si compone da sola...
come faccio a escludere anche quei caratteri???
l'istruzione if dell'esempio fornito da 9Bit trascura anche i crt "à, é, è, ì, ò, ù", ma trascura anche tutti i crt alfabetici, quindi puoi benissimo utilizzare solamente quella.Non hai perciò di usare la mia
Codice: [Seleziona]
$Como = Key.Text  
Select Case $Como 
             Case "a" to "z", "A" to "Z",".", ",", ecc..... 
                   Stop Event 
End Select
Devi però testare anche i tasti come [Canc], [Tab], [Shift+Tab], [Backspace], [freccia indietro], [freccia avanti], perchè non sono sicuro che non vengano trascurati.
 :ciao:
:ciao:

Offline simo97

  • Gran Maestro dei Gamberi
  • *****
  • Post: 501
    • Mostra profilo
Si.... Ma (penso di non essermi spiegato) io chiedevo perché mi lascia inserire quei caratteri.... Poi per le frecce, Beck space. Etc... Troverò il modo di includerli (lo chiedo direttamente a voi) ma l'importante per ora è come limitare l'inserimento a quei caratteri (che da quello che ho capito sono "diversi dagli altri")

E con questo chiudo per oggi :sleepy:
;D

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.723
  • Ne mors quidem nos iunget
    • Mostra profilo
« Ultima modifica: 04 Maggio 2013, 23:42:43 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 simo97

  • Gran Maestro dei Gamberi
  • *****
  • Post: 501
    • Mostra profilo
Sicuro....
Domani vedrò ;)
;D

Offline simo97

  • Gran Maestro dei Gamberi
  • *****
  • Post: 501
    • Mostra profilo
Codice: gambas [Seleziona]
Public Function Filtro(stringa As String)  
 If key.Text Like "[^0-9.,-]" Then
   Stop Event
 Endif
If Key.Text = "." Then
  If (ricerca(stringa, ".") = 1 And Len(stringa) >= 1) Then
    Stop Event
  Endif
Endif
If Key.Text = "è" Or Key.Text = "ò" Or Key.Text = "à" Or Key.Text = "ù" Then
  Stop Event
Endif
End


ok manca solo la trsformazione della "," in puntino e qualche carattere

bene si fanno progressi ;D ;D
;D

Offline Picavbg

  • Senatore Gambero
  • ******
  • Post: 1.620
    • Mostra profilo
La tua Function Filtro è richiamata nell'evento KeyPress?

Non capisco la seguente istruzione
Codice: [Seleziona]
 If (ricerca(stringa, ".") = 1 And Len(stringa) >= 1) Then  

puoi scriverla anche così:
Codice: [Seleziona]
 If ricerca(stringa, ".") = 1 And Len(stringa) >= 1  Then
 
Ma ricerca(stringa, ".") non funziona in quanto non  ricerca non è riconosciuto da Gambas. Fai invece
Codice: [Seleziona]
dim ricerca as Integer
........................................
ricerca = instr(stringa,".")
if ricerca > 0  then
  Stop Event
Endif

Inoltre, come ti ho già detto nel mio precedente post, l'istruzione:
Codice: [Seleziona]
If Key.Text = "è" Or Key.Text = "ò" Or Key.Text = "à" Or Key.Text = "ù" Then  
non produce alcun effetto, perchè non verrà mai eseguita. il quanto quel lavoro è già egregiamente svolta dalla
Codice: [Seleziona]
If key.Text Like "[^0-9.,-]" Then  

« Ultima modifica: 05 Maggio 2013, 17:58:29 da Picavbg »
:ciao:

Offline pastrank

  • Maestro Gambero
  • ****
  • Post: 266
    • Mostra profilo
ok manca solo la trsformazione della "," in puntino e qualche carattere

Anche il copia e incolla verso e da le tue caselle di testo puo' dare problemi.

Offline simo97

  • Gran Maestro dei Gamberi
  • *****
  • Post: 501
    • Mostra profilo
scusate....
ricerca è una mia funzione!!!
Codice: gambas [Seleziona]
Public Function ricerca(testo As String, lettera As String) As Integer
   Dim l, trovato As Integer
     
   For l = 1 To Len(testo)   
' Se il carattere controllato è uguale a quello che si sta cercando.... 
     If Mid(testo, l, 1) = lettera Then 
'...allora incrementa di un'unità il valore della variabile integer che tiene il conto: 
       Inc trovato
    Endif   
   Next   
     
    Return trovato
End


si è chiamata in un evento keypress

Citazione
Inoltre, come ti ho già detto nel mio precedente post, l'istruzione:
Codice:
If Key.Text = "è" Or Key.Text = "ò" Or Key.Text = "à" Or Key.Text = "ù" Then
non produce alcun effetto, perchè non verrà mai eseguita. il quanto quel lavoro è già egregiamente svolta dalla
Codice:
If key.Text Like "[^0-9.,-]" Then

no ti sbagli....
il like non accette stringe unicode!!!

Citazione
Non capisco la seguente istruzione
Codice:
If (ricerca(stringa, ".") = 1 And Len(stringa) >= 1) Then

puoi scriverla anche così:
Codice:
If ricerca(stringa, ".") = 1 And Len(stringa) >= 1  Then
 

errore mio...

ho aggiunto qualcosina ma niente di che...

ecco dove sono arrivato
Codice: gambas [Seleziona]
Public Function Filtro(stringa As String)  
 If key.Text Like "[^0-9.,-]" Then
   Stop Event
 Endif
If Key.Text = "." Then
  If ricerca(stringa, ".") = 1 Then
    Stop Event
  Endif
Endif
If Key.Text = "-" Then
  If ricerca(stringa, "-") = 1 Then
    Stop Event
  Endif
Endif
If Key.Text = "-" Then
  If Not Left(stringa, 1) = "-" Then
    Stop Event
  Endif
Endif
Select Case Key.Text
  Case "è", "é", "ò", "ç", "à", "°", "ù", "§", "£", "ì", "€"
    Stop Event
End Select
End


manca solo la virgola e il meno che (per ora) non fa quello che voglio
cioè che si può inserire solo all'inizio e una volta sola
alcune istruzioni sono in un altra funzione che però va inserita nel change

un pò lunghetto.... 
;D

Offline simo97

  • Gran Maestro dei Gamberi
  • *****
  • Post: 501
    • Mostra profilo
ok manca solo la trsformazione della "," in puntino e qualche carattere

Anche il copia e incolla verso e da le tue caselle di testo puo' dare problemi.

vero!!!! non ci avevo pensato
come si fa a escluderli??
;D