Scomporre una stringa e caricare ogni parola in una variabile array
Il caso in questione è quello in cui si ha una stringa, nella quale sono presenti anche dei comandi: carrello a capo + nuova riga, così da ottenere visivamente più righe, come nell'esempio sottostante:
Questo è il Wiki di Gambas-it cioè è una collezione di documenti ipertestuali che può essere modificata dai suoi utilizzatori
L'intenzione è quello di scomporre tale stringa in modo da distinguere ed inserire i vari gruppi di caratteri alfanumerici comprensibli (ossia le normali parole) e diversi dagli spazi, che formano la stringa, in una variabile array.
Indice
Se la stringa è posta in una variabile
Poniamo il caso che quella stringa sia caricata tutta nella variabile stringa "wiki".
Con l'uso delle funzioni "Replace" e "Split"
Private wiki As String = "Questo è il Wiki di Gambas-it\n" & "cioè è una collezione di documenti ipertestuali\n" & "che può essere modificata dai suoi utilizzatori" Public Sub Button1_Click() Dim a As String Dim aa As String[] Dim j As Byte ' Eliminiamo innanzitutto dalla stringa tutti i comandi: ' "carrello a capo + nuova riga", trasformandoli in semplici spazi. ' La stringa si trasformerà visivamente in un'unica riga lineare. Questo per preparare ' la stringa alla successiva funzione ed affinché essa resti unica: a = Replace(wiki, "\n", " ") ' Si scompone, quindi, la stringa così ottenuta, ponendo come punto ' di divisione di ogni elemento dall'altro gli spazi. Si pone a "True" l'ultimo parametro ' della funzione "Split", in modo tale da assicurarsi completamente la non considerazione di qualsisi spazio. ' Nella variabile array "aa" avremo, quindi, una parola alfanumerica per ciascun elemento: aa = Split(a, " ", "", True) ' Andiamo a vedere il contenuto di ciascun elemento dell'array: for j = 0 to aa.Max Print aa[j] Next End
Senza la funzione "Split" e senza usare un file di appoggio
come vedremo nel paragrafo sottostante, per poter distinguere le parole all'interno di una stringa potrà essere utilizzato "Input" al posto della funzione Split. Se, inoltre, non vogliamo usare con Input alcun file di appoggio, potremo usare i Memory Stream, dato che questi si comportano - e possono essere quindi gestiti - in modo analogo ai file:
Public Sub Button1_Click() Dim s As String Dim p As Pointer Dim m As Stream Dim ss As New String[] s = "Questa è una prova" ' Puntiamo con una variabile di tipo "Pointer" alla variabile stringa: p = VarPtr(s) ' Dal "Pointer" generiamo lo "Stream": m = Memory p For Read ' In qualunque modo dobbiamo conoscere il numero delle parole, ' contenuto nella variabile stringa "s": For j = 0 To 3 Input #m, s ' Andiamo a caricare ciascuna parola, distinta l'una dall'altra, nella variabile-array: ss.add(s) Next End
Se la stringa viene letta da un file di testo
In tal caso possiamo adottare due modalità:
Lettura con il metodo File.Load
Il file di testo viene letto con il metodo .Load della classe File; ed i dati risultanti saranno posti in una variabile di tipo stringa:
Public Sub Button1_Click() Dim a As String a = File.Load("percorso_del_file_di_testo") ' Qui, poi, le funzioni "Split" e "Replace"...... End
Si procederà poi a distinguere le varie parole della stringa, caricata nella variabile, mediante le due funzioni "Split" e "Replace" sostanzialmente con le medesime modalità viste prima.
Lettura con Open....For Read/Input
Con quest'altra modalità si leggerà il file di testo come un file binario mediante la fuzione Input. Come è noto, "Input" legge le stringhe in un File di testo fino all'interruzione dello spazio o al carattere di "nuova linea". Ciò permetterà di individuare ogni parola del testo, delimitata da uno spazio, e di caricarla successivamente in un nuovo elemento di un'apposita variabile-array:
Public Sub Button1_Click() Dim fl As File Dim s$ As String Dim ss$ As New String[] Dim j As Byte fl = Open "percorso_del_file_di_testo" For Read ' ...oppure "Input" While Not Eof(fl) Input #fl, s$ ' Ogni parola del testo, delimitata da uno spazio, viene individuata ' e caricata in un nuovo elemento della variabile-array ss$: ss$.Add(s$) Wend ' Mostra in console ogni stringa (parola) contenuta in ciascun elemento della variabile-array ss$: For j = 0 To ss$.Max Print ss$[j] Next End