Autore Topic: estendere il like a tutto l'unicode  (Letto 1774 volte)

Offline simo97

  • Gran Maestro dei Gamberi
  • *****
  • Post: 501
    • Mostra profilo
estendere il like a tutto l'unicode
« il: 17 Maggio 2013, 19:44:45 »
il titolo dice quasi tutto
ho letto che per farlo bisogna attivare il componente gb.pcre ma non ho letto come percui data la mia nota pigrizia chiedo a voi gentilissimi sigrori e (forse) signore....
;D

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.723
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: estendere il like a tutto l'unicode
« Risposta #1 il: 18 Maggio 2013, 01:12:35 »
Cioè tu intendi dire: estendere la capacità del Like di riconoscere ogni carattere dell'Unicode ?


Una cosa simile a questa ?    :-X
Codice: gambas [Seleziona]

Private s As String


Public Sub Form_Open()
 
  s = "ali" & String.Chr(&1D160) & "baba"

End


Public Sub Button1_Click()

   If s Like "*" & String.Chr(&1D160) & "ba*" Then
   
      Print "Verificata corrispondenza !"

   Endif

End
« 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
Re: estendere il like a tutto l'unicode
« Risposta #2 il: 18 Maggio 2013, 17:35:29 »
Codice: gambas [Seleziona]
 
If key.Text Like "[^0-9.,-]" Then
   Stop Event
 Endif

.........
in teoria con questo dovrei essere sicuro che altri caratteri non vangano inseriti...
ma non è così
perchè sulla spiezazione (il popup) di like c'è scritto che funziona solo con gli UTF-8, accenna al componente gb.prce

ora dovrebbe essere comprensibile a tutti qual'è il problemino ;)
;D

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.723
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: estendere il like a tutto l'unicode
« Risposta #3 il: 18 Maggio 2013, 19:06:07 »
ora dovrebbe essere comprensibile a tutti qual'è il problemino

Io ancora no.  :-\
Ho provato il tuo codice e premendo qualunque tasto sulla tastiera compreso fra 0 e 9, nonché la virgola, il punto ed il trattino del meno non viene passata la verifica. Cioè se io, ad esempio, metto:
Codice: gambas [Seleziona]

Public Sub Form_KeyPress()

   If key.Text Like "[^0-9.,-]" Then
  
      Print "verifica"

   Endif  

End

e premo il tasto di un simbolo presente nel Pattern di Like, nella console non viene scritto niente.

Oppure tu intendi una verifica di Like, oltre relativa ad un tasto, anche relativa ad una qualunque stringa di caratteri ?
« Ultima modifica: 18 Maggio 2013, 23:30:21 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
Re: estendere il like a tutto l'unicode
« Risposta #4 il: 18 Maggio 2013, 22:44:31 »
no....
se con il mio codice dai "è","ò","à" etc... viene inserito mentre non dovrebbe essere possibile
io chedevo solamente come estendere il controllo like a tutti i vari "codici"(simboli,lettere,altre combinazioni di tasti etc..) possibili
 :ciao:
ora spero di essermi spigato :P
;D

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.723
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: estendere il like a tutto l'unicode
« Risposta #5 il: 18 Maggio 2013, 23:29:46 »
se con il mio codice dai "è","ò","à" etc... viene inserito mentre non dovrebbe essere possibile
io chedevo solamente come estendere il controllo like a tutti i vari "codici"(simboli,lettere,altre combinazioni di tasti etc..) possibili

Se io provo con il tuo codice, un po' modificato (ossia quello che ho inserito poco sopra), e premo i tasti "è","ò","à", nella console non viene scritto niente.  :-\
Proprio come nelle tue intenzioni.
« 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
Re: estendere il like a tutto l'unicode
« Risposta #6 il: 19 Maggio 2013, 07:36:09 »
Riepilogo un minuto :
Obbiettivo :Essre sicuro che non vengano scritti altri caratteri.

Con il mio codice però Ci sono dei caratteri che sfuggono a questo controllo tipo quelli che ho scritto.
Inserendo quei caratteri in un altro case si escludono anche quelli
Ma qelli non sono gli unici, tutte le combinazioni di scift, alt+control etc


Lascate stare gli errori di grammatica...
Ho scritto col telefono in macchina  :rolleyes:
« Ultima modifica: 19 Maggio 2013, 07:40:09 da simo97 »
;D

Offline pastrank

  • Maestro Gambero
  • ****
  • Post: 266
    • Mostra profilo
Re: estendere il like a tutto l'unicode
« Risposta #7 il: 19 Maggio 2013, 10:46:57 »
Obbiettivo :Essre sicuro che non vengano scritti altri caratteri.

Metti uno zero (a seconda del caso) nella tag del controllo, la routine di controllo nell'evento Change, se quello che hai combacia con la maschera che vuoi con il like allora e' ok, e inserisci il valore che hai sul momento nella tag ancora, se non lo e' ripeschi il valore della tag e lo riassegni al text del controllo.
Il controllo lo puoi fare con isnumber, aiutato da una prova precedente tipo

Codice: [Seleziona]
If TextBox1.text = "," Then
    TextBox1.text = "0,"
Endif

Do While Left(TextBox1.text, 2) = "00"
    TextBox1.text = Mid(TextBox1.text, 2)
Loop

Do While Left(TextBox1.text, 3) = "-00"
    TextBox1.text = "-0" & Mid(TextBox1.text, 3)
Loop

'qui ci metti tutti i like che vuoi, che devono comprendere anche i numeri parziali ovviamente
dim procedi as boolean
if textbox1.text like cosi' o cosa' o pomi'
  'con le regexp duro fatica, figurati a scriverne una a mente che prenda piu' casi
  'in ogni caso puoi fare un ciclo: se tieni in valor in array che puoi richiamare a seconda del caso, definiti globali, puoi
  'anche riusarli in tutto il programma
  ' i numeri accettabili se non mi sfugge qualcosa sono, mentre li scrivi, "-", "-0", "0,"
  procedi=true
endif

if procedi=true then
   TextBox1.tag = TextBox1.text   
else
   TextBox1.text = TextBox1.tag
endif 

Ovviamente, qui c'e' il controllo con la virgola come separatore, ma devi controllare quale adopera il sistema dove lo usi, in una funzione all'inizio che lo metta in una variabile. Funziona anche per il copia incolla. Ricorda che e'  un numero anche 1.0344e15, quindi se vuoi evitare la c controllo da fare. Alla fine, prima dei calcoli, devi vedere ancora se questi sono numeri, ma con una sola prova, giusto per vedere che non ci sia un numero incompleto, tipo -0.

Una versione semplificata e' questa, per i numeri non esponenziali: ben lungi dall'essere perfetta, sembra quasi funzionare, ma ovviamente intendi tutto come un suggerimento e non come una cosa da fare copia e incolla.
Codice: [Seleziona]
If TextBox1.text = "," Then
    TextBox1.text = "0,"
Endif

Do While Left(TextBox1.text, 2) = "00"
    TextBox1.text = Mid(TextBox1.text, 2)
Loop

Do While Left(TextBox1.text, 3) = "-00"
    TextBox1.text = "-0" & Mid(TextBox1.text, 3)
Loop

If InStr(TextBox1.text, "e") Then
    TextBox1.text = Replace(TextBox1.text, "e", "")
Endif

If IsNumber(TextBox1.text & "0") = False Then
   TextBox1.text = TextBox1.tag
Endif
TextBox1.tag = TextBox1.text   

Offline simo97

  • Gran Maestro dei Gamberi
  • *****
  • Post: 501
    • Mostra profilo
Re: estendere il like a tutto l'unicode
« Risposta #8 il: 19 Maggio 2013, 18:31:30 »
Ora non ho tempo ma un mille grazie c'è sempre
;D

Offline simo97

  • Gran Maestro dei Gamberi
  • *****
  • Post: 501
    • Mostra profilo
Re: estendere il like a tutto l'unicode
« Risposta #9 il: 21 Maggio 2013, 18:16:18 »
se con il mio codice dai "è","ò","à" etc... viene inserito mentre non dovrebbe essere possibile
io chedevo solamente come estendere il controllo like a tutti i vari "codici"(simboli,lettere,altre combinazioni di tasti etc..) possibili

Se io provo con il tuo codice, un po' modificato (ossia quello che ho inserito poco sopra), e premo i tasti "è","ò","à", nella console non viene scritto niente.  :-\
Proprio come nelle tue intenzioni.
si ma non perchè il like lo ferma, ma perchè il like non accetta quei caratteri quindi la verifica non viene neppure eseguita

questo viene dalla documentazione di like
Citazione
Attenzione! LIKE si occupa come solo dei caratteri ASCII. Per ricercare stringhe con il set di caratteri UTF-8, Usare la gb.pcre componenti.
chiedo spigazioni in merito...

per il codice di pastrank quando ci capirò qualcosa lo applicherò da qualche parte
;D

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.723
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: estendere il like a tutto l'unicode
« Risposta #10 il: 21 Maggio 2013, 18:21:24 »
si ma non perchè il like lo ferma, ma perchè il like non accetta quei caratteri quindi la verifica non viene neppure eseguita

Non ne comprendo la differenza.  ???
« 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
Re: estendere il like a tutto l'unicode
« Risposta #11 il: 21 Maggio 2013, 18:30:25 »
Codice: gambas [Seleziona]
 If key.Text Like "[^0-9.,-]" Then
  Stop Event
 Endif

la differenza la capisci qui...

se gli dò "4" il like lo lascia passare (nel senso che non lo stoppa)
se gli dò "g" il like eseguendo la verifica vede che non è tra quelli consentiti e quindi lo stoppa
se gli dò "è" il like non lo accetta e non esegue neanche la verifica passando avanti e quindi il carattere non viene stoppato

;D

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.723
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: estendere il like a tutto l'unicode
« Risposta #12 il: 21 Maggio 2013, 19:14:49 »
se gli dò "4" il like lo lascia passare (nel senso che non lo stoppa)
se gli dò "g" il like eseguendo la verifica vede che non è tra quelli consentiti e quindi lo stoppa
se gli dò "è" il like non lo accetta e non esegue neanche la verifica passando avanti e quindi il carattere non viene stoppato


....io credo :-X che la verifica, in quanto tale, dell' IF venga sempre compiuta. La sua risposta è altra cosa.
Ad ogni modo, ripeto che sulla base di quel codice qualunque riga di comando posta all'interno della verifica condizionale dell'IF mi viene eseguita, se premo un qualunque tasto sulla tastiera, anche combinato, ad eccezione dei numeri, della virgola, del punto, del meno e dei caratteri: è, é, à, °, ù, §, ò, ç, ì.
« Ultima modifica: 21 Maggio 2013, 19:33:30 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
Re: estendere il like a tutto l'unicode
« Risposta #13 il: 21 Maggio 2013, 19:26:46 »
Citazione
è, é, à, °, ù, §, ò, ç
non sono gli unici....ce ne sono una trentina(che conosco), l'unicode è lungo....

ma per il controllo questi non dovrebbero essere inseriti
ora si potrebbe fare un case ma l'unicode è lungo


come posso usare le informazioni contenute qui??
Citazione
Attenzione! LIKE si occupa come solo dei caratteri ASCII. Per ricercare stringhe con il set di caratteri UTF-8, Usare la gb.pcre componenti.
;D

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.723
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: estendere il like a tutto l'unicode
« Risposta #14 il: 21 Maggio 2013, 19:34:11 »
non sono gli unici....ce ne sono una trentina(che conosco),

Io ti parlavo semplicemente di quelli presenti sulla tastiera italiana,  :-\ e sui quali ho fatto le prove.


come posso usare le informazioni contenute qui??
Citazione
Attenzione! LIKE si occupa come solo dei caratteri ASCII. Per ricercare stringhe con il set di caratteri UTF-8, Usare la gb.pcre componenti.
...aprendo un progetto nuovo e studiandosi il componente gb.pcre...... ;D
« Ultima modifica: 21 Maggio 2013, 19:36:12 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. »