Differenze tra le versioni di "Scan"

Da Gambas-it.org - Wikipedia.
Riga 14: Riga 14:
 
  "Gambas è un * ambiente * di applicazioni"
 
  "Gambas è un * ambiente * di applicazioni"
  
<BR>I metacaratteri <FONT Color=#B22222 size=4>*</font> rappresentano, dunque, le sole parti della stringa che popoleranno la variabile vettoriale di ritorno.
+
I metacaratteri <FONT Color=#B22222 size=4>*</font> rappresentano, dunque, le sole parti della stringa che popoleranno la variabile vettoriale di ritorno.
  
I caratteri che servono per identificare il punto di separazione fra una parte e l'altra della stringa, vanno collocati nella funzione ''Scan()'' comunque rispettando il loro ordine di posizione nella stringa medesima.  
+
I caratteri che servono a identificare il punto di separazione fra una parte e l'altra della stringa, vanno collocati nella funzione ''Scan()'' comunque rispettando il loro ordine di posizione nella stringa medesima.
  
 +
Si precisa che la composizione della stringa, da passare al secondo paramentro della funzione Scan( ), deve tenere in considerazione comunque l'intera stringa di caratteri passata al primo argomento attuale della funzione.
 +
<BR>Quindi, se la stringa è ad esempio:
 +
Gambas non è un clone di VB
 +
nel secondo parametro dovrò tenere conto dell'intera frase, e quindi ad esempio fare una cosa di questo genere:
 +
ss = Scan("Gambas non è un clone di VB", "*''un clone''*")
 +
Laddove il primo metacarattere dell'asterisco farà riferimento (ingloberà) la parte "''Gambas non è'' " (ossia dal primo carattere della stringa) , e il secondo asterisco farà riferimento a "''di VB''" (ossia fino all'ultimo carattere della stringa).
 +
<BR>Va fatto rilevare che le parti della stringa, presenti in modo esplicito (i caratteri "''un clone'' " del nostro esempio) nel secondo argomento, non vengono memorizzate nella variabile vettoriale restituita dalla funzione Scan( ).
  
Facciamo qualche esempio:
+
 
 +
Facciamo qualche esempio pratico:
 
  '''Public''' Sub Main()
 
  '''Public''' Sub Main()
 
   
 
   

Versione delle 08:30, 11 gen 2018

La funzione Scan() restituisce un vettore di tipo Stringa contenente quelle parti della stringa (impostata nel primo parametro della funzione Scan() ), identificate e distinte fra loro in base ad uno o più caratteri contigui esistenti nella stringa medesima e che nel secondo parametro della fuzione Scan() sono collocati fra due metacaratteri * .


Se per esempio dalla stringa di caratteri iniziale:

Gambas è un potente ambiente per lo sviluppo di applicazioni

vogliamo estrarre soltanto le parole

potente per lo sviluppo

facendo in modo - però - che la parola "potente" popoli il primo elemento del vettore, mentre le parole "per lo sviluppo" popolino il secondo elemento del vettore, potremo operare logicamente come segue.
Individuiamo esattamente la parola "potente" dai caratteri che la circondano: essa è delimitata dai precedenti caratteri "Gambas è un " e dai seguenti caratteri " ambiente per lo sviluppo di applicazioni" della stringa iniziale; pertanto avremo:

Gambas è un * ambiente per lo sviluppo di applicazioni

quindi individuiamo le parole "per lo sviluppo": esse sono delimitate dai precedenti caratteri "Gambas è un potente ambiente " e dai seguenti caratteri " di applicazioni" della stringa iniziale; pertanto avremo:

Gambas è un potente ambiente * di applicazioni

In conclusione nel secondo parametro si passerà alla funzione Scan( ) il seguente dato-stringa:

"Gambas è un * ambiente * di applicazioni"

I metacaratteri * rappresentano, dunque, le sole parti della stringa che popoleranno la variabile vettoriale di ritorno.

I caratteri che servono a identificare il punto di separazione fra una parte e l'altra della stringa, vanno collocati nella funzione Scan() comunque rispettando il loro ordine di posizione nella stringa medesima.

Si precisa che la composizione della stringa, da passare al secondo paramentro della funzione Scan( ), deve tenere in considerazione comunque l'intera stringa di caratteri passata al primo argomento attuale della funzione.
Quindi, se la stringa è ad esempio:

Gambas non è un clone di VB

nel secondo parametro dovrò tenere conto dell'intera frase, e quindi ad esempio fare una cosa di questo genere:

ss = Scan("Gambas non è un clone di VB", "*un clone*")

Laddove il primo metacarattere dell'asterisco farà riferimento (ingloberà) la parte "Gambas non è " (ossia dal primo carattere della stringa) , e il secondo asterisco farà riferimento a "di VB" (ossia fino all'ultimo carattere della stringa).
Va fatto rilevare che le parti della stringa, presenti in modo esplicito (i caratteri "un clone " del nostro esempio) nel secondo argomento, non vengono memorizzate nella variabile vettoriale restituita dalla funzione Scan( ).


Facciamo qualche esempio pratico:

Public Sub Main()

 Dim s As String = "Questa|è una, %provaK/ di Scan()"
 Dim ss As String[]

' Ovviamente anche lo spazio è un carattere:
  ss = Scan(s, "*|* *, %*K/ *")

  For Each s In ss
    Print s
  Next

End


In quest'altro esempio i caratteri separatori saranno soltanto i 5 spazi:

Public Sub Main()

 Dim s As String = "Questa è una prova di Scan()"
 Dim ss As String[]

' Ovviamente anche lo spazio è un carattere.
' Qui 6 * individuano 5 spazi:
  ss = Scan(s, "* * * * * *")

' Oppure anche così:
'  ss = Scan(s, RTrim(String$(6, "* ")))

  For Each s In ss
    Print s
  Next

End


In quest'altro esempio il carattere separatore è il punto presente in un numero in virgola mobile. Si potrà in questo modo estrarre sia la parte intera che la parte decimale essenziale di quel numero:

Public Sub Main()

  Print Scan(CStr(5 / 3), "*.*")[1]

End


La funzione Scan() risulta molto utile nel caso in cui, avendo una stringa formata da gruppi di valori significativi divisi da specifiche parole identificative di ciascun gruppo di valori, si intenda raccogliere, distinti per ciascun campo del vettore restituito da detta funzione, quei valori significativi.

Mostriamo un esempio, nel quale i gruppi di valori significativi da raccogliere sono: 1234, 5678, ABCD, EFGH, distinti fra loro dalle parole: uno, due, tre e quattro.
Basandoci, dunque su tali parole identificative di ciascun gruppo, raccoglieremo mediante la funzione Scan() i valori siginificativi rappresentati:

Public Sub Main()

 Dim s As String = "uno1234due5678treABCDquattroEFGH"
 Dim ss As String[]
   
  ss = Scan(s, "uno*due*tre*quattro*")
  
  For Each s In ss
    Print s
  Next

End

La funzione Scan(), insomma, può per certi versi essere equiparata un po' alla funzione Split(), con la differenza che nella funzione Scan() è possibile utilizzare più valori separatori, purché impostati correttamente nella sequenza dei caratteri e delle parole presenti nella stringa da trattare.