Gambas-it

Archivi (sola lettura) => Programmazione (Gambas 2) => Topic aperto da: Ceskho - 09 Maggio 2009, 19:21:55

Titolo: cercare parole all'intero di una stringa
Inserito da: Ceskho - 09 Maggio 2009, 19:21:55
Dovrei vedere se una frase è all'interno di una stringa. Devo usare LIKE? Ma non ho capito come si usa...

Ah, la stringa in questione è l'output di un comando del terminale!
Titolo: Re: cercare parole all'intero di una stringa
Inserito da: fsurfing - 09 Maggio 2009, 19:52:52
io di solito faccio così:

Codice: [Seleziona]
InStr(stringa-incui-cercare,frase-da-trovare)



ti ritorna la posizione della frase
se non esiste ritorna 0
Titolo: Re: cercare parole all'intero di una stringa
Inserito da: Ceskho - 10 Maggio 2009, 00:10:17
Mi dispiace ma non riesco a farlo funzionare....ho provato ad assegnare il comando ad una valuebox ma mi restituisce sempre 0....
Titolo: Re: cercare parole all'intero di una stringa
Inserito da: Picavbg - 10 Maggio 2009, 00:19:38
@ Ceskho:

Da quello che dici, a te dovrebbe servire solamente il risultato della ricerca della stringa2 nella stringa1 col risultato "TRUE" o "FALSE". Dalla guida "A Beginner's Guide to Gambas" si capisce però che con "Like" viene controllata la corrispondenza di un carattere qualsiasi della stringa2 nella stringa1; ciò non é quello che vuoi tu. Io non ho mai usato Like, ma ho fatto qualche prova ottenendo sempre una risposta negativa, mentre mi aspettavo un esito "TRUE".

Comunque le prove fatte sono le seguenti:
Citazione
1^ prova
Codice: [Seleziona]

DIM $_Stringa2 AS String
DIM $_Stringa1 AS String
DIM b_Esito AS Boolean

$_Stringa1 = "cerca una parola"
$_Stringa2 = "una"
b_Esito = $_Stringa1 LIKE $_Stringa2
IF b_Esito = TRUE THEN
'IF $_Stringa LIKE $_Pattern THEN
  Message.Info("Trovato")
ELSE
  Message.Info("ricerca negativa")
ENDIF


2^ prova
Codice: [Seleziona]
$_Stringa1 = "cerca una parola"
$_Stringa2 = "una"
IF $_Stringa1 LIKE  $_Stringa2 THEN
  Message.Info("Trovato")
ELSE
  Message.Info("ricerca negativa")
ENDIF



La sintassi é giusta, solo che non capisco perché mi ritorna sempre e solo il messaggio "ricerca negativa".:-o  

Staremo a vedere!

In ogni caso, per conoscere se tutta la stringa2 é contenuta nella stringa1, mi sembra che l'unica strada percorribile sia quella della funzione "Instr" che ti ha suggerito fsurfing   :-)
  :ciao:  :ciao:
Titolo: Re: cercare parole all'intero di una stringa
Inserito da: - 10 Maggio 2009, 01:30:19
@picachubg
Hai dimenticato il magico asterisco ..... bisogna metterlo
Codice: [Seleziona]

if "ambraba ci ci co co" LIKE "* ci * " then trovato = TRUE
Titolo: Re: cercare parole all'intero di una stringa
Inserito da: Ceskho - 10 Maggio 2009, 01:34:07
Grazie a tutti ragazzi.
Titolo: Re: cercare parole all'intero di una stringa
Inserito da: leo72 - 10 Maggio 2009, 10:49:23
Perché dici che Instr non ti funziona?
Instr serve proprio a cercare una stringa all'interno di un'altra.
Scrivere
Codice: [Seleziona]

StringaPrincipale = "Il mare è blu"
StringaDaCercare = "mare"
A = Instr(StringaPrincipale, StringaDaCercare)

dà come risultato 4, cioè la posizione da cui StringaDaCercare è contenuta in StringaPrincipale.

Se invece StringaDaCercare fosse ad esempio "marx" invece di "mare", allora A conterrebbe come risultato 0 perché la ricerca non avrebbe dato esito.

Bisogna poi ricordarsi una cosa: il controllo distingue fra maiuscole e minuscole. Quindi "Mare" non è la stessa cosa di "mare". E' conveniente, se la ricerca è da effettuarsi su nomi ad esempio, portare tutto a minuscolo:
Codice: [Seleziona]

A = Instr(Lower(StringaPrincipale), Lower(StringaDaCercare))
Titolo: Re: cercare parole all'intero di una stringa
Inserito da: Picavbg - 10 Maggio 2009, 18:49:47
Citazione

giac_fab ha scritto:

Hai dimenticato il magico asterisco ..... bisogna metterlo
Codice: [Seleziona]

if "ambraba ci ci co co" LIKE "* ci * " then trovato = TRUE


Grazie, ma onestamente devo dire che non l'ho dimenticato. È che... non lo sapevo proprio. Ho fatto dei tentativi veloci  e, siccome già :sonno: , ho chiuso la puntata a quel punto. Sicuramente ci :leggo:  sopra. :-)
 :ciao:
Titolo: Re: cercare parole all'intero di una stringa
Inserito da: vuott - 15 Novembre 2013, 12:35:37
Un'altra modalità può essere la seguente:
Codice: gambas [Seleziona]

Public Sub Main()

   If Split("Questa è una prova", Chr(32)).Exist("una") Then Print "La parola è presente !"

End