Con Visual Basic 6 è possibile utilizzare moltissime funzioni per una gestione copmpleta delle stringhe, ovvero delle variabili destinate a contenere caratteri.
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,
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
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.
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
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.
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).
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
La funzione StrReverse restituisce la stringa di input letta al contrario.
Dim a As String a = "prova" MsgBox StrReverse(a) ' il risultato sarà "avrop"
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"
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
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.