Left..Right..Mid

Da Gambas-it.org - Wikipedia.
Left(”Gambas-it.org”, 3)
Right(”Gambas-it.org”, 3)
Mid(”Gambas-it.org”, 4, 2)

Estrapola una porzione di testo da una stringa


Non c’è niente da fare, prima o poi capiterà di dover manipolare i dati presenti in una stringa di testo. Gambas2 ci viene in aiuto con queste tre istruzioni:

  • Left (sinistra)
  • Right (destra)
  • Mid (in mezzo)

L’utilizzo di queste istruzioni è molto semplice:

Left estrae i dati partendo da sinistra; guardando la riga di codice sopra riportato avremo la stampa della parola Gam.

Right estrae i dati partendo da destra; guardando la riga di codice sopra riportato avremo la stampa della parola org.

Mid estrae i dati partendo da una posizione specificata e con un intervallo specificato; guardando la riga di codice sopra riportato avremo la stampa della parola as.

Attenzione, la posizione di partenza e l’intervallo è in funzione dei caratteri, la posizione 0 (zero) non esiste (nell'uso delle funzioni per le stringhe il primo carattere di una stringa è sempre a posizione 1), e l’intervallo è il numero di caratteri da estrapolare.


Uso della funzione Mid()

Vediamo di seguito come estrapolare una parte di una parola con un esempio di codice che potrà tornarci utile nei nostri progetti:

DIM variabile AS String
DIM tmp AS Integer
variabile = “Gambas-it.org”
   FOR tmp = 1 TO Len(variabile)
      IF Mid(variabile, tmp, 3) == “bas” THEN
         Message.Info(”Trovata la parola ” & Mid(variabile, tmp, 3))
      ENDIF
   NEXT

Analizziamo ogni singola riga per comprenderne meglio il significato:

DIM variabile AS String dichiarazione della variabile (nome e tipo)

DIM tmp AS Integer dichiarazione della variabile (nome e tipo)

FOR tmp = 1 TO Len(variabile) comunichiamo al sistema che valori può assumere tmp, ovvero da 1 alla lunghezza (Len) di variabile, nel nostro caso 13.

IF Mid(variabile, tmp, 3) = “bas” THEN chiediamo al sistema che deve controllare il valore di variabile (o meglio il 'Mid' di variabile), se questo valore è uguale a “bas” allora deve fare qualche cosa

Message.Info(”Trovata la parola ” & Mid(variabile, tmp, 3)) ad ogni valore di variabile uguale a “bas” il sistema stampa la frase “Trovata la parola ” e la parola trovata, ovviamente tale frase sarà stampata una sola volta in quanto la parola “bas” è presente una sola volta all’interno di “Gambas-it.org”.

ENDIF termina il codice iniziato con IF.

NEXT procediamo con un nuovo valore fino al raggiungimento del numero 13.


Usare la funzione Mid() in scrittura

Sino ad ora abbiamo visto l'uso in lettura delle tre funzioni: "Left()", "Mid()" e "Right()".
Va aggiunto che riguardo alla sola funzione "Mid()" è possibile anche un uso in scrittura: è possibile assegnare uno o più caratteri alla funzione "Mid()" per sostituire uno o più caratteri all'interno della stringa.
Più precisamente con tale capacità la funzione "Mid()" può sostituire uno o più caratteri, che quelli che le si assegnano, a partire dalla posizione indicata nel secondo parametro e per un numero di caratteri da sostituire specificato nel terzo parametro.
Quindi in via generale la funzione "Mid()" risulta utile anche per scrivere dentro una stringa, sostituendo così uno o più caratteri originari esistenti.

Facciamo un esempio pratico:

Public Sub Main()
 
 Dim s As String
 
 s = "abcdefghilm"
 
' Si sostituisce il 5° carattere (la lettera "e") con il carattere escape "\n":
 Mid(s, 5, 1) = gb.NewLine
 
 Print s
  
End

Altro esempio:

Public Sub Main()
 
 Dim s As String
 
 s = "abcdefghilm"
 
' Si sostituiscono a partire dal 5° carattere (la lettera "e") 3 caratteri con 3 "X":
 Mid(s, 5, 3) = "XXX"
 
 Print s
  
End

Se, però, il numero, indicato nel 3° argomento, dei caratteri da sostituire è superiore al numero dei caratteri assegnato:

Public Sub Main()
 
 Dim s As String
 
 s = "abcdefghilm"
 
' Si intende sostituire, a partire dal 5° carattere (la lettera "e"), 3 caratteri con "un solo" carattere "X":
 Mid(s, 5, 3) = "X"
 
 Print s
  
End

saranno sostituiti i soli primi caratteri corrispondenti nel numero ai caratteri assegnati. I restanti saranno eliminati.
Il risultato vedrà sostituito il primo carattere indicato, ossia la lettera "e", e persi i restanti due, ossia "f" e "g")


Se, invece, il numero di caratteri assegnati è maggiore di quello indicato nel terzo argomento della funzione "Mid()":

Public Sub Main()
 
 Dim s As String
 
 s = "abcdefghilm"
 
' Si intende sostituire, a partire dal 5° carattere (la lettera "e"), 3 caratteri con "cinque" caratteri "X":
 Mid(s, 5, 3) = "XXXXX"
 
 Print s
  
End

allora il numero eccedente di caratteri sarà aggiunto immediatamente a seguire i caratteri sostituiti.


Uso di un valore negativo nel parametro attinente alla quantità di caratteri da estrapolare

Come è noto, il parametro "Length" specifica la quantità di caratteri da estrapolare:

Left ( Arg As String [ , Length As Integer ] )
Mid ( Source As String , Start As Integer  [ , Length As Integer ] )
Right ( Arg As String [ , Length As Integer ] )

Un valore positivo di "Length" restituisce appunto la quantità specificata di caratteri.
Se "Length" non è specificato, viene restituito il primo carattere della stringa.

Però, se "Length" è negativo, viene restituita tutta la stringa tranne gli ultimi caratteri specificati in ( - Length ):

Public Sub Main()
 
 Dim s As String
 
 s = "abcdefghilm"
 
' Si intende estrapolare a partire da sinistra l'intera stringa meno gli ultimi tre caratteri:
 s = Left(s, -3)
 
 Print s
  
End

Il risultato sarà: abcdefgh



Note

  • Le istruzioni descritte hanno le stesse funzioni di quelle in Visual Basic, e in Gambas esistono anche le nomenclature classiche del Basic: Left$, Right$ e Mid$. Questi alias sono presenti per compatibilità con il Visual Basic, e probilmente scompariranno (come alias) dalle librerie di Gambas.