Differenze tra le versioni di "Left..Right..Mid"
Riga 6: | Riga 6: | ||
Non c’è niente da fare, prima o poi capiterà di dover manipolare i dati presenti in una stringa di testo. | 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: | Gambas2 ci viene in aiuto con queste tre istruzioni: | ||
− | '''Left''' (sinistra) | + | * '''Left''' (sinistra) |
− | '''Right''' (destra) | + | * '''Right''' (destra) |
− | '''Mid''' (in mezzo) | + | * '''Mid''' (in mezzo) |
L’utilizzo di queste istruzioni è molto semplice: | L’utilizzo di queste istruzioni è molto semplice: | ||
Riga 116: | Riga 116: | ||
'''End''' | '''End''' | ||
allora il numero eccedente di caratteri sarà aggiunto immediatamente a seguire i caratteri sostituiti. | 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 [ , <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. | ||
+ | |||
+ | 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 l'intera stringa meno gli ultimi tre caratteri:''</font> | ||
+ | s = Left(s, -3) | ||
+ | |||
+ | Print s | ||
+ | |||
+ | '''End''' | ||
+ | Il risultato sarà: ''abcdefgh'' | ||
Versione delle 07:57, 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.
Indice
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 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.