Differenze tra le versioni di "Left..Right..Mid"

Da Gambas-it.org - Wikipedia.
 
 
(11 versioni intermedie di 4 utenti non mostrate)
Riga 1: Riga 1:
 +
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''.
  
 +
<FONT Color=red><B>Attenzione</b></font>, la posizione di partenza e l’intervallo è in funzione dei caratteri, la posizione 0 (zero) non esiste (<SPAN Style="text-decoration:underline">nell'uso delle funzioni per le stringhe il primo carattere di una stringa è sempre a posizione '''1'''</span>), e l’intervallo è il numero di caratteri da estrapolare.
  
DIM variabile AS Integer
 
  
FOR variabile = 1 TO 10
+
==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
  
    IF variabile = 5 THEN
+
----
 
 
        PRINT “Trovato il numero”
 
 
 
    ELSE
 
 
 
        PRINT “Sto cercando il numero…”
 
 
 
    ENDIF
 
 
 
NEXT
 
 
 
Un’altro mattone fondamentale nella scrittura di codice Basic (e quindi in Gambas) è l’istruzione IF…THEN…ELSE (letteralmente se…allora…altrimenti).
 
 
 
Come per l’esempio FOR…NEXT le righe di programma sopra riportate si trasformano in questo modo:
 
 
 
Per variabile che va’ da 1 a 10 se il valore di variabile è uguale a 5 stampa la frase ”Trovato il numero” altrimenti stampa la frase “Sto cercando il numero…” quindi procedi con il prossimo valore di variabile.
 
 
 
Sostituendo le parole al codice si avrebbe
 
 
 
Per variabile che va’ da 1 a 10
 
 
 
se il valore di variabile è uguale a 5
 
 
 
stampa la parola “Trovato il numero”
 
 
 
altrimenti
 
 
 
stampa la parola “Sto cercando il numero…”
 
 
 
quindi procedi con il prossimo valore di variabile
 
  
 
Analizziamo ogni singola riga per comprenderne meglio il significato:
 
Analizziamo ogni singola riga per comprenderne meglio il significato:
  
DIM variabile AS Integer dichiarazione della variabile (nome e tipo)
+
''DIM variabile AS String'' dichiarazione della variabile (nome e tipo)
 
 
FOR variabile = 1 TO 10 comunichiamo al sistema che valori può assumere variabile, ovvero da 1 a 10
 
 
 
IF variabile = 5 THEN comunichiamo al sistema che deve controllare il valore di variabile, se questo valore è uguale a 5 allora deve fare qualche cosa
 
 
 
PRINT “Trovato il numero” ad ogni valore di variabile uguale a 5 il sistema stampa la frase “Trovato il numero”, ovviamente tale frase sarà stampata una sola volta in quanto in un campo di numeri da 1 a 10, il numero 5 non è ripetuto.
 
 
 
ELSE con l’istruzione IF chiediamo al programma di verificare una rispondenza, se questa non si avvera il controllo passa all’istruzione ELSE (altrimenti) che esegue un’altra porzione di codice.
 
 
 
PRINT “Sto cercando il numero…” ad ogni valore di variabile che non sia uguale a 5 il sistema stampa la frase “Sto cercando il numero…”, tale frase sarà stampata 9 volte.
 
  
ENDIF termina il codice iniziato con IF.
+
''DIM tmp AS Integer'' dichiarazione della variabile (nome e tipo)
  
NEXT procediamo con un nuovo valore fino al raggiungimento del numero 10.
+
''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.
  
A differenza dell’istruzione FOR…NEXT, IF…THEN può essere scritta anche in una linea sola evitando quindi l’utilizzo di ELSE ed ENDIF: 
+
''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
  
IF variabile = 5 THEN PRINT “Trovato il numero”
+
''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”.
  
Se vogliamo stampare solo la frase “Trovato il numero” eviteremo l’utilizzo di ELSE:
+
''ENDIF'' termina il codice iniziato con IF.
  
DIM variabile AS Integer
+
''NEXT'' procediamo con un nuovo valore fino al raggiungimento del numero 13.
  
FOR variabile = 1 TO 10
 
  
    IF variabile = 5 THEN
+
===Usare la funzione Mid() in scrittura===
 +
Sino ad ora abbiamo visto l'uso in ''lettura'' delle tre funzioni: "Left()", "Mid()" e "Right()".
 +
<BR>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.
 +
<BR>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.
 +
<BR>Quindi in via generale la funzione "Mid()" risulta utile anche per scrivere dentro una stringa, sostituendo così uno o più caratteri originari esistenti.
  
        PRINT “Trovato il numero”
+
Facciamo un esempio pratico:
 +
'''Public''' Sub Main()
 +
 
 +
  Dim s As String
 +
 
 +
  s = "abcdefghilm"
 +
 
 +
<FONT Color=gray>' ''Si sostituisce il 5° carattere (la lettera "e") con il carattere escape "\n":''</font>
 +
  Mid(s, 5, 1) = gb.NewLine
 +
 
 +
  Print s
 +
 
 +
'''End'''
 +
 +
Altro esempio:
 +
'''Public''' Sub Main()
 +
 
 +
  Dim s As String
 +
 
 +
  s = "abcdefghilm"
 +
 
 +
<FONT Color=gray>' ''Si sostituiscono a partire dal 5° carattere (la lettera "e") 3 caratteri con 3 "X":''</font>
 +
  Mid(s, 5, 3) = "XXX"
 +
 
 +
  Print s
 +
 
 +
'''End'''
  
    ENDIF
+
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"
 +
 
 +
<FONT Color=gray>' ''Si intende sostituire, a partire dal 5° carattere (la lettera "e"), 3 caratteri con "un solo" carattere "X":''</font>
 +
  Mid(s, 5, 3) = "X"
 +
 
 +
  Print s
 +
 
 +
'''End'''
 +
saranno sostituiti i soli primi caratteri corrispondenti nel numero ai caratteri assegnati. I restanti saranno eliminati.
 +
<BR>Il risultato vedrà sostituito il primo carattere indicato, ossia la lettera "e", e persi i restanti due, ossia "f" e "g")
  
NEXT
 
  
Le possibile scelte condizionali che offre l’istruzione IF…THEN sono:
+
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"
 +
 
 +
<FONT Color=gray>' ''Si intende sostituire, a partire dal 5° carattere (la lettera "e"), 3 caratteri con "cinque" caratteri "X":''</font>
 +
  Mid(s, 5, 3) = "XXXXX"
 +
 
 +
  Print s
 +
 
 +
'''End'''
 +
allora il numero eccedente di caratteri sarà aggiunto immediatamente a seguire i caratteri sostituiti.
  
= uguale (variabile = 5)
 
  
> maggiore (variabile > 5)
+
==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 [ , <FONT Color=#B22222>Length As Integer</font> ] )
 +
Mid ( Source As String , Start As Integer  [ , <FONT Color=#B22222>Length As Integer</font> ] )
 +
Right ( Arg As String [ , <FONT Color=#B22222>Length As Integer</font> ] )
 +
Un valore positivo di "''Length''" restituisce appunto la quantità specificata di caratteri.
 +
<BR>Se "''Length''" non è specificato, viene restituito il primo carattere della stringa.
  
< minore (variabile > 5)
+
Però, se "''Length''" è <SPAN Style="text-decoration:underline">negativo</span>, viene restituita tutta la stringa tranne gli ultimi caratteri specificati in ( '''-''' Length ):
 +
'''Public''' Sub Main()
 +
 
 +
  Dim s As String
 +
 
 +
  s = "abcdefghilm"
 +
 
 +
<FONT Color=gray>' ''Si intende estrapolare a partire da sinistra l'intera stringa '''meno''' gli ultimi tre caratteri:''</font>
 +
  s = Left(s, <FONT Color=#B22222><B>-</b>3</font>)
 +
 
 +
  Print s
 +
 
 +
'''End'''
 +
Il risultato sarà: ''abcdefgh''
  
<> diverso (variabile <> 5)
 
  
>= maggiore o uguale (variabile >= 5)
 
  
<= minore o uguale (variabile <= 5)
+
----
 +
=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.

Versione attuale delle 08:59, 16 ago 2020

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.