Gambas-it

Gambas3 => Programmazione => Topic aperto da: simo97 - 01 Maggio 2013, 18:13:34

Titolo: [risolto[...]]esiste una funzione che cerca un crt all'interno di una stringa
Inserito da: simo97 - 01 Maggio 2013, 18:13:34
ho trovato qualcosa ma mi danno la posizione mente a me servirebbe qualcosa di boolean..

tipo vogli sapere se in -stringa- è presente la lettera "a"
se è presente true
se non è presente false

esiste o me la creo...
Titolo: Re: esiste una funzione che cerca una lettera all'interno di una stringa
Inserito da: milio - 01 Maggio 2013, 18:51:06
Instr() ?


If Instr("Ciccio","u") Then
  Print "C'e'"
Else
  Print "Non c'e'"
EndIf
Titolo: Re: esiste una funzione che cerca una lettera all'interno di una stringa
Inserito da: vuott - 01 Maggio 2013, 18:54:55
...oppure anche così:    :-X
Codice: gambas [Seleziona]

Public Sub Button1_Click()

  Dim b As Boolean
 
    b = CBool(InStr("alibaba", "i"))
 
' Vedo in console il risultato booleano:
    Print b

End
Titolo: Re: esiste una funzione che cerca una lettera all'interno di una stringa
Inserito da: simo97 - 01 Maggio 2013, 19:09:41
ok ma non restituisce la posizione della prima "occorrenza"..

è in un change...
dovrebbe servire per var inserire il puntino una volta sola..
Codice: gambas [Seleziona]

 If (InStr(stringa, ".") ) And (Len(stringa) > 1) Then
              lettera = "."
            Else
              lettera = ""
            Endif


non va....
Titolo: Re: esiste una funzione che cerca una lettera all'interno di una stringa
Inserito da: vuott - 01 Maggio 2013, 19:11:37

non va....

Non va cosa con precisione ?....   ???
Titolo: Re: esiste una funzione che cerca una lettera all'interno di una stringa
Inserito da: simo97 - 01 Maggio 2013, 19:14:15
lo fa inserire più di una volta...(la lettera..)
Titolo: Re: esiste una funzione che cerca una lettera all'interno di una stringa
Inserito da: vuott - 01 Maggio 2013, 19:18:07
lo fa inserire più di una volta...(la lettera..)

Perdonami, non capisco.

"Lo fa"... chi ?

Puoi essere più dettagliato e preciso ?


Ad ogni modo a me il tuo codice, posto all'interno di una  semplice Form_Open() funziona:   :-\
Codice: gambas [Seleziona]

Public Sub Form_Open()

  Dim stringa As String = "ali.baba"
  Dim lettera As String
 

   If (InStr(stringa, ".")) And (Len(stringa) > 1) Then 
             lettera = "." 
           Else 
             lettera = "" 
           Endif

   Print lettera

End
Titolo: Re: esiste una funzione che cerca una lettera all'interno di una stringa
Inserito da: pastrank - 01 Maggio 2013, 19:19:47
lo fa inserire più di una volta...(la lettera..)

Se questo riguarda il controllo di cosa scrivi nel formulinux, considera anche di non farlo inserire nel textbox ma in masked edit, di evitare che si possa scrivere 1.1.1 controllando con la funzione Like, e di usare anche isnumber() per controllare alla fine il tutto: non a caso, dicevo che la storia era lunga!
Titolo: Re: esiste una funzione che cerca una lettera all'interno di una stringa
Inserito da: vuott - 01 Maggio 2013, 19:21:55
Se questo riguarda il controllo di cosa scrivi nel formulinux, ......... non a caso, dicevo che la storia era lunga!

Ahhh, ma allora la questione è all'interno di una struttura codice ben più complessa !
Titolo: Re: esiste una funzione che cerca una lettera all'interno di una stringa
Inserito da: milio - 01 Maggio 2013, 19:22:12
ho trovato qualcosa ma mi danno la posizione mente a me servirebbe qualcosa di boolean..

....

ok ma non restituisce la posizione della prima "occorrenza"..

è in un change...
dovrebbe servire per var inserire il puntino una volta sola..


 ???
Titolo: Re: esiste una funzione che cerca una lettera all'interno di una stringa
Inserito da: simo97 - 01 Maggio 2013, 19:27:21
infatti servia proprio a quello...

allora spiego

ho la funzione
Codice: gambas [Seleziona]
Public Function controllo(stringa As String) As String 
  
  Dim lettera As String
  
  lettera = Right(stringa, 1)
  
  If lettera <> "" Then
      Select Case lettera
      
          Case "0" To "9"
              lettera = lettera
          Case ","
            If InStr(stringa, ",") = 1 And Len(stringa) > 1 Then
              lettera = "."
            Else
              lettera = ""
            Endif
          Case "."
            If (InStr(stringa, ".")) And (Len(stringa) > 1) Then
              lettera = "."
            Else
              lettera = ""
            Endif
          Case "-"
            If (Left(stringa, 1) = "-") And (Len(stringa) > 1) Then ''ricontrollare
              lettera = ""
            Else
            lettera = "-"
            Endif
          Case Else
              lettera = ""
      End Select
  
  stringa = Left(stringa, Len(stringa) - 1) & lettera
  
  Endif
  Return stringa
  
End


che uso
Codice: gambas [Seleziona]

public sub text_change
text.text=controllo(text.text)
end

(credo che l'abbia scritta vuott..)

doveva servire a confermare che il testo inserito nella text sia veramente un float...
però la funzione non è completa...
Titolo: Re: esiste una funzione che cerca una lettera all'interno di una stringa
Inserito da: simo97 - 01 Maggio 2013, 19:28:25
Se questo riguarda il controllo di cosa scrivi nel formulinux, ......... non a caso, dicevo che la storia era lunga!

Ahhh, ma allora la questione è all'interno di una struttura codice ben più complessa !

è sempre in qualcosa di più complesso ;D ;D ;D
Titolo: Re: esiste una funzione che cerca una lettera all'interno di una stringa
Inserito da: milio - 01 Maggio 2013, 19:44:30
Puoi spiegare a cosa ti serve questo controllo?
Titolo: Re: esiste una funzione che cerca una lettera all'interno di una stringa
Inserito da: simo97 - 01 Maggio 2013, 19:52:08
lavorando solo con i numeri
doveva servire a limitare l'accesso alle text ai soli numeri e di non permettere di inserire più di un puntino/meno, in quel caso non sarebbe un numero e derebbe errore...

è difficile da spiegare...
forse così va meglio
con formulinux avevo inserito la funzione -controllo-
però non è completa perche ti permette di fare una cosa del genere 1.2.5 oppure 6-9.6.3 e si riuscirebbe anche a fare fg20 scrivendo prima il 20....
ora io dovrei completare la funzione...
Titolo: Re: esiste una funzione che cerca una lettera all'interno di una stringa
Inserito da: pastrank - 01 Maggio 2013, 20:00:04
lavorando solo con i numeri

Aspetta (e ricorda che di solito faccio tutt'altre cose, quindi non sono abituato). Intanto guarda qui, ci ho ripensato adesso:
http://gambasdoc.org/help/comp/gb.form/valuebox?show&v3 (http://gambasdoc.org/help/comp/gb.form/valuebox?show&v3)

Poi i controlli li farai in una funzione successiva, per tutte le procedure, magari
Titolo: Re: esiste una funzione che cerca una lettera all'interno di una stringa
Inserito da: simo97 - 01 Maggio 2013, 20:10:32
non ne conosco le proprietà... :-\ :-\
mai usata... :mad:
vedrò..ma non mi piace limitarmi la vita...
alla fine si dovra comunque lavorare con le stinge...

in teoria solo l'utente non può inserire le lettere il programma volendo dovrebbe poterlo fare...

grazie per i molti consigli pastrano... :2birre:
Titolo: Re: esiste una funzione che cerca una lettera all'interno di una stringa
Inserito da: pastrank - 01 Maggio 2013, 21:08:41
non ne conosco le proprietà... :-\ :-\
mai usata... :mad:
vedrò..ma non mi piace limitarmi la vita...
alla fine si dovra comunque lavorare con le stinge...
in teoria solo l'utente non può inserire le lettere il programma volendo dovrebbe poterlo fare...

Non e' che l'uso sia cosi' difficile, se dopo 20 secondi che la stavo usando l'avevo capito io. Ne pare una limitazione, non sei obbligato a usarla ovunque ma solo dove serve, e dubito anche che appesantisca il programma, visto che e' solo una textbox "filtrata"
Titolo: Re: esiste una funzione che cerca una lettera all'interno di una stringa
Inserito da: simo97 - 01 Maggio 2013, 21:42:05
hai anche ragione....

ma tornando al principio....

allora non c'è un funzione di ricerca e alla fine mi dà il numero di caratteri trovati in una stringa...
ne creo una...
Titolo: Re: esiste una funzione che cerca una lettera all'interno di una stringa
Inserito da: vuott - 01 Maggio 2013, 23:23:59
allora non c'è un funzione di ricerca e alla fine mi dà il numero di caratteri trovati in una stringa...
A me non risulta.


ne creo una...
E' la cosa più sensata.  :)
Titolo: Re: esiste una funzione che cerca una lettera all'interno di una stringa
Inserito da: Picavbg - 01 Maggio 2013, 23:31:18
Se non ho capito male, si vuole limitare l'input ai soli caratteri numerici dentro una TextBox.
Il controllo si risolve assai facilmente, facendo intervenire l'evento "KeyPress", al cui interno si può testare il singolo crt(carattere) digitato e scartare tutti i caratteri diversi dai numeri:
Codice: gambas [Seleziona]
$Como = Key.Text
 Select Case $Como
              Case "a" to "z", "A" to "Z",".", ",", ecc.....
                    Stop Event
 End Select

Attenzione perchè oltre ai crt alfanumerici, esistono anche i Key.Code corrisoppondenti ai tasti funnzione, ai tasti "Invio", "Tab",...
 :ciao:
Titolo: Re: esiste una funzione che cerca una lettera all'interno di una stringa
Inserito da: 9bit - 02 Maggio 2013, 00:22:48
Oppure:
Codice: gambas [Seleziona]

Public Sub Filtro()
  If Key.Text Like "[^0-9.]" And Asc(Key.Text) > 31 Then
    Stop Event
  Else If Key.Text Like "." And InStr(text.Text, ".") Then
    Stop Event
  End If
End

Inserisce numeri e un solo punto (.)

Ps: da inserire nell'evento _KeyPress()
Titolo: Re: esiste una funzione che cerca una lettera all'interno di una stringa
Inserito da: Picavbg - 02 Maggio 2013, 13:32:55
Oppure:
Codice: gambas [Seleziona]

Public Sub Filtro()
  If Key.Text Like "[^0-9.]" And Asc(Key.Text) > 31 Then
    Stop Event
  Else If Key.Text Like "." And InStr(text.Text, ".") Then
    Stop Event
  End If
End

Inserisce numeri e un solo punto (.)

Ps: da inserire nell'evento _KeyPress()

l'istruzione successiva alla if ... Else
 
Codice: [Seleziona]
Else If Key.Text Like "." And InStr(text.Text, ".") Then
    Stop Event
mi sembra ridondante rispetto alla precedente, in quanto già la
Codice: [Seleziona]
 If Key.Text Like "[^0-9.]" And Asc(Key.Text) > 31 Then
    Stop Event
è sufficiente a trascurare il "."

Non vengono però trascurati tutti i crt digitati con CTRL+tasto-qualsiasi. Quindi bisogna estendere il controllo anche su combinazioni come quella appena indicata.
 :ciao:
Titolo: Re: esiste una funzione che cerca una lettera all'interno di una stringa
Inserito da: simo97 - 02 Maggio 2013, 14:34:24
 :o :o :o
dovevo crearla io!!!
grazie per le "soluzioni"...

ok ma avevo qualcosa di diverso in mente...

Titolo: Re: esiste una funzione che cerca una lettera all'interno di una stringa
Inserito da: simo97 - 02 Maggio 2013, 16:11:25
Codice: gambas [Seleziona]
Public Function ricerca(testo As String, lettera As String) As Integer
Dim count, lef, righ, l As Integer
Dim lung As Integer = Len(testo)
Dim lett, par As String
count = 0
lef = 0
righ = lung
For l = 1 To lung
  lef += 1
  righ -= 1
  par = Left(testo, lef)
  lett = Right(par, righ)
  If lett = lettera Then
    count += 1
  Endif
Next
  Return count
End


perchè non funziona :hard: :hard: :hard: :hatecomputer: :hatecomputer: :hatecomputer:

comunque et voila!! ;D
Titolo: Re: esiste una funzione che cerca una lettera all'interno di una stringa
Inserito da: vuott - 02 Maggio 2013, 16:12:38
ok ma avevo qualcosa di diverso in mente...


...oddio, la ceskhonite !  :'(
Titolo: Re: esiste una funzione che cerca una lettera all'interno di una stringa
Inserito da: simo97 - 02 Maggio 2013, 16:15:12
...cronica :hatecomputer: :hatecomputer: :hatecomputer:
Titolo: Re: esiste una funzione che cerca una lettera all'interno di una stringa
Inserito da: vuott - 02 Maggio 2013, 18:07:28

perchè non funziona

Comunque, io non ho capito soprattutto una cosa: sei partito con il cercare semplicemente una lettera all'interno di una riga, e che il risultato fosse di tipo booleano.... poi........    :rolleyes:
Titolo: Re: esiste una funzione che cerca una lettera all'interno di una stringa
Inserito da: simo97 - 02 Maggio 2013, 18:20:27
poi sono finito a creare una funzione che restituisce il numero di caratteri trovati in un qualunque testo...
Titolo: Re: esiste una funzione che cerca una lettera all'interno di una stringa
Inserito da: vuott - 02 Maggio 2013, 18:25:03
poi sono finito a creare una funzione che restituisce il numero di caratteri trovati....

Quindi in quest'ultimo codice l'obiettivo vuoi raggiungere è conoscere il numero complessivo dei caratteri trovati ?

Ma sembra che la variabile di tipo stringa lettera verrà sempre a contenere un carattere da cercare... e quindi il risultato sarà sempre 1 !  :-\

...o forse tu vuoi sapere quante volte la medesima lettera è presente in una riga ?!
Titolo: Re: esiste una funzione che cerca una lettera all'interno di una stringa
Inserito da: simo97 - 02 Maggio 2013, 18:31:09
vuott non ti seguo....

la variabile lettera è il carattere da cercare all'interno del testo....
la variabile lett invecie dovrebbe essere un carattere singolo del testo
Titolo: Re: esiste una funzione che cerca una lettera all'interno di una stringa
Inserito da: simo97 - 02 Maggio 2013, 18:31:44
bravo :ok: :ok: :ok:

non mi ero spigato bene :donkey: :donkey:
Titolo: Re: esiste una funzione che cerca una lettera all'interno di una stringa
Inserito da: vuott - 02 Maggio 2013, 18:38:50
Allora, se l'obiettivo è sapere quante volte è presente un dato carattere in una stringa, io farei così:
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
Titolo: Re: esiste una funzione che cerca una lettera all'interno di una stringa
Inserito da: simo97 - 02 Maggio 2013, 18:41:08
ecco, una mezza specie di quello che volevo fare io.... :-[
solo non avevo usato il mid.... :hatecomputer:

 
Titolo: Re: esiste una funzione che cerca una lettera all'interno di una stringa
Inserito da: vuott - 02 Maggio 2013, 18:50:24
solo non avevo usato il mid.... :hatecomputer:
 

...effetti indesiderati della ceskhonite !    ;D
Titolo: Re: esiste una funzione che cerca una lettera all'interno di una stringa
Inserito da: simo97 - 02 Maggio 2013, 18:52:39
 :rotfl: :rotfl: :rotfl:
ceskhonite  del cavolo :evil: :evil: :evil:
Titolo: Re: esiste una funzione che cerca una lettera all'interno di una stringa
Inserito da: Picavbg - 02 Maggio 2013, 21:59:02
 :o
Ad un certo punto della discussiome si legge:
lavorando solo con i numeri
doveva servire a limitare l'accesso alle text ai soli numeri e di non permettere di inserire più di un puntino/meno, in quel caso non sarebbe un numero e derebbe errore...
poi continuando...:
Citazione
in teoria solo l'utente non può inserire le lettere
Ma ciò che cosa a che fare con
Citazione
la variabile lettera è il carattere da cercare all'interno del testo....
la variabile lett invecie dovrebbe essere un carattere singolo del testo

Secondo me, prima di fare domande, occorrerebbe essere consapevoli di quello che si vuole fare, cosa si vuole veramente controllare e cosa si vuole ottenere. Credo, senza per questo volerti offendere, caro simo97, che dovresti mettere un pò di ordine nelle tue idee.
Facendo tanti ragionamenti porti fuori strada anche chi vorrebbe e potrebbe aiutarti.
Ti prego di considerare quanto appena ho scritto semplicemente come un consiglio.
 :ciao:
Titolo: Re: esiste una funzione che cerca una lettera all'interno di una stringa
Inserito da: simo97 - 02 Maggio 2013, 22:07:33
vero... :-[
Titolo: Re: [risolto]esiste una funzione che cerca una lettera all'interno di una stringa
Inserito da: Picavbg - 02 Maggio 2013, 22:12:25
Devo comunque complimentarmi per la tua buona volontà e le tue sicure capacità di inventiva.
Continua ad esercitarti e ... non demordere mai.  :D
 :ciao:
Titolo: Re: [risolto]esiste una funzione che cerca una lettera all'interno di una stringa
Inserito da: simo97 - 02 Maggio 2013, 22:17:36
 :-[
Titolo: Re: esiste una funzione che cerca una lettera all'interno di una stringa
Inserito da: vuott - 02 Maggio 2013, 22:19:05
Secondo me, prima di fare domande, occorrerebbe essere consapevoli di quello che si vuole fare, cosa si vuole veramente controllare e cosa si vuole ottenere. Credo, senza per questo volerti offendere, caro simo97, che dovresti mettere un pò di ordine nelle tue idee.


A volte succede che non si riesce ad essere chiari nelle premesse e negli obiettivi, ed effettivamente è difficile capire quello che l'utente vuole.

(http://upload.wikimedia.org/wikipedia/commons/thumb/4/40/Byzantine_Empire_animated.gif/350px-Byzantine_Empire_animated.gif)
Titolo: Re: esiste una funzione che cerca una lettera all'interno di una stringa
Inserito da: 9bit - 02 Maggio 2013, 23:04:51
Oppure:
Codice: gambas [Seleziona]

Public Sub Filtro()
  If Key.Text Like "[^0-9.]" And Asc(Key.Text) > 31 Then
    Stop Event
  Else If Key.Text Like "." And InStr(text.Text, ".") Then
    Stop Event
  End If
End

Inserisce numeri e un solo punto (.)

Ps: da inserire nell'evento _KeyPress()

l'istruzione successiva alla if ... Else
 
Codice: [Seleziona]
Else If Key.Text Like "." And InStr(text.Text, ".") Then
    Stop Event
mi sembra ridondante rispetto alla precedente, in quanto già la
Codice: [Seleziona]
 If Key.Text Like "[^0-9.]" And Asc(Key.Text) > 31 Then
    Stop Event
è sufficiente a trascurare il "."

Non vengono però trascurati tutti i crt digitati con CTRL+tasto-qualsiasi. Quindi bisogna estendere il controllo anche su combinazioni come quella appena indicata.
 :ciao:
Scusami Picavbg, forse non ho capito, ma se elimino la riga "Else If", non si limita più a farmi inserire un solo "punto"...ma continua a farmeli inserire?  :-\
Titolo: Re: esiste una funzione che cerca una lettera all'interno di una stringa
Inserito da: Picavbg - 02 Maggio 2013, 23:10:19

A volte succede che non si riesce ad essere chiari nelle premesse e negli obiettivi, ed effettivamente è difficile capire quello che si vuole.

Quello che dici tu è vero, ma riguarda un concetto più generale che sta a monte di un progetto, quando invece si entra nel dettagli, ormai la fase progettuale deve essere stata affrontata, ragionata e completata. Poi qualsiasi progetto, piccolo a grande che sia, dovrebbe essere sempre sostenuto da una traccia scritta che si dovrebbe seguire perchè il progetto si mantenga sempre dentro i binari del disegno logico da realizzare, secondo la formula
Citazione
dati di partenza -> programma -> risultato
il programma costituisce l'insieme dei processi tecnici occorrenti per produrre il risultato voluto coi dati pertinenti a disposizione.
L'aspetto a cui ho accennato or ora sarebbe stato un ottimo argomento da inserire fra gli articoli del nostro e-zine, ormai in stato di quarantena dal lontano dicembre 2010.  :'(
Ciò non significa che il Forum non possa essere d'aiuto; basta spiegare passo passo, senza timore di dilungarsi, partendo dall'idea di base. quello che si vorrebbe realizzare. In presenza di richieste di sostegno per la progettazione, i supporter, secondo me, dovrebbero limitarsi a dare opinioni progettuali teoriche, senza mai sostituirsi all'ideatore con soluzioni pratiche di realizzazione di Form e/o di classi. Non credo assolutamente che sia un vero aiuto. La soluzione pratica deve essere sempre scelta ed applicata dall'autore, unico proprietario dell'idea concettuale della realizzazione, salvo, naturalmente, una sua diversa indicazione durante tutta l'evoluzione della discussione. :)

Dopo lo sforzo sostenuto per scrivere codeste poche righe, ho riletto il tutto e, debbo dire, che mi sono capito. Spero di avere espresso il mio concetto chiaramente anche per chi, diversamente da me che hoavuto l'idea di scriverlo,  dovesse solamente leggere questo post.  ;D
 :ciao:


Titolo: Re: [risolto]esiste una funzione che cerca una lettera all'interno di una stringa
Inserito da: 9bit - 02 Maggio 2013, 23:15:55
Cristallino!! Grazie.  :ciao:
Titolo: Re: esiste una funzione che cerca una lettera all'interno di una stringa
Inserito da: Picavbg - 02 Maggio 2013, 23:19:20
Scusami Picavbg, forse non ho capito, ma se elimino la riga "Else If", non si limita più a farmi inserire un solo "punto"...ma continua a farmeli inserire?  :-\

Ma infatti io avevo capito che il "." fosse un crt da trascurare, mentre i numeri sarebbero comunque stati gli unici crt consentiti in digitazione. Però il prosieguo della discussione mi ha fatto capire che il problema fosse in realtà quello di individuare la ricorrenza di certi crt e la presenza singola di un certo crt. Non ne ho capito lo scopo perchè non è stato citato. Penso tuttavia, visto che è stato già considerato [Risolto], che possiamo benissimo risparmiarci qualsiasi approfondimento.
 :ciao:
Titolo: Re: [risolto]esiste una funzione che cerca una lettera all'interno di una stringa
Inserito da: 9bit - 02 Maggio 2013, 23:22:40
Ok! L'importante che sia stato risolto. Chiudo anch'io.
 :ciao:
Titolo: Re: [risolto]esiste una funzione che cerca una lettera all'interno di una stringa
Inserito da: simo97 - 03 Maggio 2013, 16:08:25
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...
Titolo: Re: [risolto]esiste una funzione che cerca una lettera all'interno di una stringa
Inserito da: vuott - 03 Maggio 2013, 16:11:24

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.  :-\
Titolo: Re: [risolto[...]]esiste una funzione che cerca un crt all'interno di una stringa
Inserito da: simo97 - 03 Maggio 2013, 16:37:19
meglio??? ;D ;D
Titolo: Re: [risolto]esiste una funzione che cerca una lettera all'interno di una stringa
Inserito da: Picavbg - 04 Maggio 2013, 00:07:47
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:
Titolo: Re: [risolto[...]]esiste una funzione che cerca un crt all'interno di una stringa
Inserito da: simo97 - 04 Maggio 2013, 15:22:27
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ò..
Titolo: Re: [risolto[...]]esiste una funzione che cerca un crt all'interno di una stringa
Inserito da: simo97 - 04 Maggio 2013, 16:25:25
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???
Titolo: Re: [risolto[...]]esiste una funzione che cerca un crt all'interno di una stringa
Inserito da: Picavbg - 04 Maggio 2013, 22:39:40

$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:
Titolo: Re: [risolto[...]]esiste una funzione che cerca un crt all'interno di una stringa
Inserito da: simo97 - 04 Maggio 2013, 23:10:36
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:
Titolo: Re: [risolto[...]]esiste una funzione che cerca un crt all'interno di una stringa
Inserito da: vuott - 04 Maggio 2013, 23:40:26
Non so  :-\ se queste discussioni possano essere in qualche modo di aiuto:
http://www.gambas-it.org/smf/index.php?topic=442.0
http://www.gambas-it.org/smf/index.php?topic=1883.0
http://www.gambas-it.org/smf/index.php?topic=1586.0
http://www.gambas-it.org/smf/index.php?topic=72.0
Titolo: Re: [risolto[...]]esiste una funzione che cerca un crt all'interno di una stringa
Inserito da: simo97 - 04 Maggio 2013, 23:52:23
Sicuro....
Domani vedrò ;)
Titolo: Re: [risolto[...]]esiste una funzione che cerca un crt all'interno di una stringa
Inserito da: simo97 - 05 Maggio 2013, 16:53:19
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
Titolo: Re: [risolto[...]]esiste una funzione che cerca un crt all'interno di una stringa
Inserito da: Picavbg - 05 Maggio 2013, 17:16:58
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  

Titolo: Re: [risolto[...]]esiste una funzione che cerca un crt all'interno di una stringa
Inserito da: pastrank - 05 Maggio 2013, 17:19:06
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.
Titolo: Re: [risolto[...]]esiste una funzione che cerca un crt all'interno di una stringa
Inserito da: simo97 - 05 Maggio 2013, 18:13:48
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.... 
Titolo: Re: [risolto[...]]esiste una funzione che cerca un crt all'interno di una stringa
Inserito da: simo97 - 05 Maggio 2013, 18:17:32
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??
Titolo: Re: [risolto[...]]esiste una funzione che cerca un crt all'interno di una stringa
Inserito da: pastrank - 05 Maggio 2013, 19:50:48
come si fa a escluderli??

Per escluderli e' facile, ti basta memorizzare il valore originale della textbox da qualche parte, tipo variabili o la tag del controllo,  e poi, nell'evento change(), controllare il testo con isnumber(), aggiungendo uno 0 alla fine nel caso ci sia un solo carattere e sia un meno.

Codice: [Seleziona]
If IsNumber(TextBox1.text & "0") = False Then
   'oppure if latuafunzione(textbox1.text) = false then
   TextBox1.text = textbox1.tag
Endif
textbox1.tag = TextBox1.text 
 

Occhio che l'ho scritto senza provarlo. E attento comunque a tutte le implicazioni, tieni conto che le calcolatrici di solito usano il punto come separatore, il formato italiano la virgola, quello inglese il punto, ma vorrai pure copiarli i risultati, e se usi il punto sul programma su di un sistema italiano, copi il risultato, lo incolli su uno spreadsheet e viene visto come stringa, ti stressi la vita.

Ed e' per quello che prima di aggiungere funzionalita' e parlare di versioni dovevi fare una cosa, controllarla bene e poi potevi andare sicuro, ora devi cambiarne un sacco  :rolleyes:
Titolo: Re: [risolto[...]]esiste una funzione che cerca un crt all'interno di una stringa
Inserito da: simo97 - 05 Maggio 2013, 19:59:57
nooo scherzi :rotfl:
cambire non tanto...
dopo tutti i controlli vuoi che non sia un numero....

il fatto della virgola è un problema solo se viene inserita dopo (cioè scrivo "544555" poi ci metto la virgola "5,44555") senno ho già una funzione che la converte....

Citazione
Per escluderli e' facile, ti basta memorizzare il valore originale della textbox da qualche parte, tipo variabili o la tag del controllo,  e poi, nell'evento change(), controllare il testo con isnumber(), aggiungendo uno 0 alla fine nel caso ci sia un solo carattere e sia un meno.

Codice:
If IsNumber(TextBox1.text & "0") = False Then
   'oppure if latuafunzione(textbox1.text) = false then
   TextBox1.text = textbox1.tag
Endif
textbox1.tag = TextBox1.text

non ciò capito molto.....ora vedo

 :2birre:-----------ho inserito sia pastrank che Picavbg tra i collaboratori di formulinux------------- :2birre:
Titolo: Re: [risolto[...]]esiste una funzione che cerca un crt all'interno di una stringa
Inserito da: pastrank - 05 Maggio 2013, 20:35:16
nooo scherzi :rotfl:
cambire non tanto...
dopo tutti i controlli vuoi che non sia un numero....

Non si sa mai, hai provato a copiarci lettere, numeri, frasi, libri? Ogni calcolo rifatto sugli estremi se ci sono limiti, etc etc? Non e' semplice semplice, per quello ti avvisavo: per dire, sai perche' avevo messo quel pezzetto di riga
Codice: [Seleziona]
if isnumber(TextBox1.text & "0") then
perche' se no isnumber() se inizi a scrivere "-" ti darebbe false.

La prima cosa, quando devi inserire dei dati, e' sempre fare in modo che siano in un formato di ingresso conosciuto, in questo caso un numero, ovvero prima di iniziare il calcolo devi essere sicuro di avere un numero. Allo stesso modo, dovessi leggere un file, prima ti dovresti assicurare che esista, che abbia i permessi per leggerlo, che contenga i dati nel formato che tu vuoi, e solo dopo leggerlo. Il vero cialtrone invece fa una funzione per leggere il file infarcita di try e basta.

Ah, nemmeno io sono il programmatore che fa tutto in modo perfetto, anzi, invecchiando peggioro continuamente  :)
Titolo: Re: [risolto[...]]esiste una funzione che cerca un crt all'interno di una stringa
Inserito da: simo97 - 05 Maggio 2013, 20:53:44
si ma la strada è ancora lunga :'( :'(
Titolo: Re: [risolto[...]]esiste una funzione che cerca un crt all'interno di una stringa
Inserito da: Picavbg - 05 Maggio 2013, 21:34:13
si ma la strada è ancora lunga :'( :'(
La strada non è lunga. Devi solamente affrontare le difficoltà che incontri una alla volta.
In questo momento dovresti lavorare su quello che hai già cominciato a gestire. Vero quello che ha messo in evidenza pastrank. Però non mettere troppa carne sui fuoco.
Ti do ancora due consigli:
- rispondi allle proposte già affrontate ed a cui non ha ancora risposto;
- leggi bene il contenuto della mia firma, dopo averne fatto tesoro, cammina sempre dentro il binario della razionalità
 :ciao:
Titolo: Re: [risolto[...]]esiste una funzione che cerca un crt all'interno di una stringa
Inserito da: simo97 - 06 Maggio 2013, 19:25:49
si ma la strada è ancora lunga :'( :'(
La strada non è lunga. Devi solamente affrontare le difficoltà che incontri una alla volta.
In questo momento dovresti lavorare su quello che hai già cominciato a gestire. Vero quello che ha messo in evidenza pastrank. Però non mettere troppa carne sui fuoco.
Ti do ancora due consigli:
- rispondi allle proposte già affrontate ed a cui non ha ancora risposto;
- leggi bene il contenuto della mia firma, dopo averne fatto tesoro, cammina sempre dentro il binario della razionalità
 :ciao:

si ora ricontrollo tutta la discussione

riguardo la tua firma la prima volta che l'ho letta già mi piaceva ora più che mai!!
 :ciao: :ciao: