Autore Topic: cercare parole all'intero di una stringa  (Letto 1627 volte)

Offline Ceskho

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 3.778
  • Vi Veri Veniversum Vivus Vici
    • Mostra profilo
    • Pagina Personale
cercare parole all'intero di una stringa
« il: 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!

Offline fsurfing

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.482
    • Mostra profilo
Re: cercare parole all'intero di una stringa
« Risposta #1 il: 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

Offline Ceskho

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 3.778
  • Vi Veri Veniversum Vivus Vici
    • Mostra profilo
    • Pagina Personale
Re: cercare parole all'intero di una stringa
« Risposta #2 il: 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....

Offline Picavbg

  • Senatore Gambero
  • ******
  • Post: 1.620
    • Mostra profilo
Re: cercare parole all'intero di una stringa
« Risposta #3 il: 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:
:ciao:

  • Visitatore
Re: cercare parole all'intero di una stringa
« Risposta #4 il: 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

Offline Ceskho

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 3.778
  • Vi Veri Veniversum Vivus Vici
    • Mostra profilo
    • Pagina Personale
Re: cercare parole all'intero di una stringa
« Risposta #5 il: 10 Maggio 2009, 01:34:07 »
Grazie a tutti ragazzi.

Offline leo72

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 2.163
    • Mostra profilo
    • http://www.leonardomiliani.com
Re: cercare parole all'intero di una stringa
« Risposta #6 il: 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))
Visita il mio sito personale: http://www.leonardomiliani.com

Offline Picavbg

  • Senatore Gambero
  • ******
  • Post: 1.620
    • Mostra profilo
Re: cercare parole all'intero di una stringa
« Risposta #7 il: 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:
:ciao:

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.720
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: cercare parole all'intero di una stringa
« Risposta #8 il: 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
« 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. »