Gestione stringhe con Visual Basic

Home | Visual Basic

Con Visual Basic 6 è possibile utilizzare moltissime funzioni per una gestione copmpleta delle stringhe, ovvero delle variabili destinate a contenere caratteri.

Definizione

La definizione di una variabili stringa può avvenire in molti modi, esplicita o implicita ovvero

Dim a As String * 10
Dim b As String
Dim c

a = "qwertyuiopx"
b = "qualsiasi stringa"
c = "adesso diventa stringa"

Con la prima modalità creiamo una stringa di dicei caratteri, l'assegnazione succesiva ignorerà il carattere x in quanto undicesimo.
La seconda modalità crea una stringa che può contenere fino a 64Kb,

Inizializzazione/Riempimento di una stringa - String e Space

Il piu delle volte è necessario inizializzare una stringa con un numero definito di spazi o di un determinato carattere. La funzione Space prende in input un numero e restituisce una stringa composta da tanti spazi quanto indicato dal parametro. In modo più generico String oltre al numero di occorrenze prende in input anche il carattere di riempimento.

a = Space(10) ' Crea una stringa di dieci spazi
b = String(15, "E") ' Crea una stringa con 15 E

Cstr e concatenazione di stringhe

Conversione in formato stringa di una variabile di qualsiasi tipo.

Dim a As Integer, b As String
a = 10000
b = CStr(a)

fa in modo che la variabile b abbia un valore "10000". Una valida alternativa a questa funzione è quella di utilizzare la concatenazione di stringhe; infatti in alcune situazioni, quando il valore della variabile da converstire è NULL la funzione retituisce un errore (Invalid use of null o Utilizzo non valido di null).

Per ovviare a questo problema si può struttare il carattere di concatenazione & che fa una conversione implicita e non generando alcun errore

Dim a , b As String
a = Null
b = "" & a

ovvero concateniamo la stringa vuota con la variabile a che può avere qualsiasi valore e che verrà convertito comunque (il valore null diventa stringa vuota).

Questo non funziona con +, l'altro concatenatore di stringhe, che funziona solo quando tutte le variabili da concatenare sono di tipo stringa.

E' quindi sempre preferibile utilizzare il concatenatore & a meno che non facciamo una gestione degli errori tali da voler individuare un'eccezzione sulle variabili con valore null.

Len - la lunghezza di una stringa

Per valutare la lunghezza di una stringa è possibile utilizzare la funzione Len che prende in input un solo parametro, la stringa

Dim a As String
a = "qwertyuiopa"
MsgBox Len(a)
' Restituisce 11

Individuazione di una sottostringa - Le funzioni Instr e InstrRev

Per capire se una stringa contiena al suo interno una sottostringa ci sono due funzioni speculari InStr e InstrRev

La funzione InStr prende in input la posizione di partenza da cui deve iniziare il confronto, che puo essere omessa, la stringa principale e la sottostringa che si vuole ricercare. Come ultimo parametro opzionale è possibile specificare il tipo di confronto: 0 per binario, 1 per testuale

Dim a As String, b As String
a = "qwertyuiopaer"
b = "Er"
MsgBox (InStr(a, b)) ' risultato 0 perchè il confronto è binario e quindi case sensitive
MsgBox (InStr(1, a, b, 1)) ' risultato 3 perché trova la prima occorrenza er
MsgBox (InStr(5, a, b, 1)) ' risultato 12 perché la ricerca parte dal quinto 
'carattere quindi viene individuata l'occorrenza finale 

L'altra funzione InStrRev è simile alla precedente in quanto restituisce la posizione di un'occorrenza di una stringa inclusa in un'altra a partire dalla fine della stringa.

Estrazione di caratteri - Le funzioni Left, Right e Mid

Per estrarre porzioni di stringa ci sono delle apposite funzioni: Left estrae la parte sinistra di una stringa, Right la parte destra e Mid pretende la posizione di partenza ed il numero di caratteri da estrarre.

Dim a As String
a = "qwErtyuiopaEr"
MsgBox (Left(a, 4)) ' Restituisce qwEr
MsgBox (Right(a, 4)) 'Restituisce paEr
MsgBox (Mid(a, 4, 3)) 'Restituisce rty

Se non inseriamo il terzo parametro la funzione Mid restituisce la restante parte della stringa nel caso in esempio dal quarto carattere fino alla fine (rtyuiopaEr).

Modifica di una stringa - Funzioni LCase, UCase, StrConv, LTrim, RTrim, Trim e Replace

Esistono delle funzioni che permettono di restituire una stringa modficata secondo alcune regole. Le funzioni LCase e UCase rispettivamente restituiscono una stringa in minuscole e maiuscole.

Una funzione che racchiude le due e ne permette altre è StrConv che come secondo parametro prende il tipo di variaziona da fare alla stringa:

StrConv ("pippo PLUTO paPErinO", vbUpperCase) ' PIPPO PLUTO PAPERINO
StrConv ("pippo PLUTO paPErinO", vbLowerCase) ' pippo pluto paperino
StrConv ("pippo PLUTO paPErinO", vbProperCase) ' Pippo Pluto Paperino

In particolare si può notare come con vbProberCase la prima lettera di ogni parola della stringa venga convertita in maiuscolo.

Altri parametri per la funzione StrConv servono più che altro per la conversione in lingue cinese e giapponese.

Le funzioni LTrim e RTrim restituiscono una stringa prima di caratteri iniziali o finali (la L e la R stanno per left e right). Trim invece rimuove gli spazi sia iniziali che finali.

La funzione Replace invece richiede come parametri una stringa iniziale, la sottostringa da trovare ed il valore per il quale deve essere sostituita. Come parametri aggiuntivi ma opzionali richiede la posizione della stringa principale da cui iniziale la ricerca, il numero di sostituzioni massime che deve fare ed il tipo di confronto.

Dim a As String
a = "Prova"
MsgBox LCase(a) '  "prova"
MsgBox UCase(a) '  "PROVA"


a = "   prova     "
MsgBox LTrim(a) '  "prova     "
MsgBox RTrim(a) '  "   prova"
MsgBox Trim(a) '  "prova" 

a = "aabbaaaaabbaaabb"
MsgBox Replace(a, "bb", "cc")  ' aaccaaaaaccaaacc
MsgBox Replace(a, "BB", "cc")  ' aabbaaaaabbaaabb perché il confronto è binario e quindi case sensitive
MsgBox Replace(a, "bb", "cc", 5)   ' aaaaccaaacc perché si parte dal quinto carattere
MsgBox Replace(a, "bb", "cc", 1, 2) ' aaccaaaaaccaaabb perché gli ho detto di sostituire solo le prime due occorrenze
MsgBox Replace(a, "BB", "cc", 1, 2, 1) ' aaccaaaaaccaaabb

StrReverse una stringa allo specchio

La funzione StrReverse restituisce la stringa di input letta al contrario.

Dim a As String
a = "prova"
MsgBox StrReverse(a) ' il risultato sarà "avrop"

Conversioni di una stringa in Array - La funzione Split (e Join)

Se la stringa rappresenta una lista di nome con un separatore preciso è possibile tramite la funzione Split di generare un array a partire da questa stringa specificando il delimitatore.

La procdura inversa invece è fatta dalla funzione Join che prende in input un array e il delimitatore e restituisce una stringa.

Dim a As String, c as String						
Dim b
a = "primo,secondo,terzo"
b = Split(a, ",") 
c = Join(b, ";")
' b(0) è "primo"
' b(1) è "secondo"
' b(2) è "terzo"
' Ubound(b) è 2, ovvero l'indice massimo dell'array b è 2
' c diventa "primo;secondo;terzo"
 

Caratteri e codici ASCII - Le funzioni ASC e CHR

Ogni carattere è rappresentato in memoria da un numero (il suo codice ASCII), la tabella dei codici ascii (ascii table) è da sempre uno standard internazionale. Visual Basic mette a disposizione due funzioni: Asc prende in input un carattere e ne restituisce il carattere corrispondente e Chr fa il contrario prende in input un numero e restituisce il suo carattere corrispondente.

a = Space(10)         'Una stringa di dieci spazi
b = String(4, "a")    'Una stringa di 4 caratteri a
c = String(3, "0")    'Una stringa di 3 caratteri 0
d = String(10, " ")   'Una stringa di 10 spazi simile alla a

Confronto tra stringhe

Un'altra ottima funzione Visual Basic per la gestione delle stringhe e StrComp che permette di ordinare le stringhe, ovvero prende in input due stringhe, ed eventualmente la modalità di confronto e restituisce un intero che indica qualle delle due è alfabeticamente maggiore.

StrComp("alfa", "beta") ' -1
StrComp("beta", "alfa") ' 1
StrComp("alfa", "Alfa", vbBinaryCompare) ' -1
StrComp("alfa", "Alfa", vbTextCompare)   ' 0
	 

Ovvero la funzione restituisce -1 se il primo termine precede il secondo nell'ordinamento alfabetico, 1 se il secondo termine precede il primo nell'ordinamento alfabetico, 0 se sono uguali. Le lettere maiuscole precedono le minuscole.

Anche qui come si può vedere dall'esempio può essere importante il terzo parametro che è la modalità di confronto, binaria o di testo.

Se invece si ha la necessità di verificare la similitudine tra due stringhe è possibile utilizzare la funzione di Levenshtein che restituisce un intero che rappresente il grado di somiglianza tra due parole.

Home