Differenze tra le versioni di "Modificare un carattere di una stringa"
(2 versioni intermedie di uno stesso utente non sono mostrate) | |||
Riga 4: | Riga 4: | ||
La modalità più semplice è quella che prevede la funzione ''Mid( )'', la quale è preposta ad individuare appunto uno o più caratteri in una stringa. <SUP>[[[#Note| Nota 1]]]</sup> | La modalità più semplice è quella che prevede la funzione ''Mid( )'', la quale è preposta ad individuare appunto uno o più caratteri in una stringa. <SUP>[[[#Note| Nota 1]]]</sup> | ||
− | Mostriamo un semplice esempio, nel quale avendo questa unica stringa "aaazbbbzccczddd", si modificherà la seconda lettera "z" in uno spazio usando appunto la funzione | + | Mostriamo un semplice esempio, nel quale avendo questa unica stringa "aaazbbbzccczddd", si modificherà la seconda lettera "z" in uno spazio usando appunto la funzione "Mid()": |
− | + | Public Sub Main() | |
Dim s As String = "aaazbbbzccczddd" | Dim s As String = "aaazbbbzccczddd" | ||
− | + | Mid(s, 8, 1) = " " | |
− | + | Print s | |
− | + | End | |
− | ==Uso della funzione | + | ==Uso della funzione Replace()== |
− | Un'altra modalità è rappresentata dall'uso della funzione | + | Un'altra modalità è rappresentata dall'uso della funzione "[[Replace|Replace( )]]". <SUP>[[[#Note|nota 1]]]</sup> |
Esempio pratico: | Esempio pratico: | ||
− | + | Public Sub Main() | |
Dim s As String = "aaazbbbzccczddd" | Dim s As String = "aaazbbbzccczddd" | ||
− | + | s = Replace(s, "zc", " c") | |
− | + | Print s | |
− | + | End | |
− | Va sottolineato che l'uso della funzione | + | Va sottolineato che l'uso della funzione "Replace()" esige l'esatta distinzione ed individuazione del carattere da modificare. Qualora, come nell'esempio precedente, l'individuazione del carattere necessiti di inserire nel secondo parametro della funzione il carattere, da cambiare, accompagnato da qualche altro carattere precedente o seguente, se dovesse paventare il rischio di identicità con altre parti della stringa, è opportuno formare un adeguato gruppo di caratteri distintivi. |
− | <BR>Così dunque se avessimo la seguente stringa "''abczabczafgzhil''", e volessimo trasformare la seconda "z" in uno spazio, saremmo costretti a prendere in considerazione - in questo caso - almeno 4 caratteri per evitare che il ripiazzamento del carattere condizioni anche la prima lettera "z" della stringa: | + | <BR>Così dunque se avessimo la seguente stringa "''abczabczafgzhil'' ", e volessimo trasformare la seconda "z" in uno spazio, saremmo costretti a prendere in considerazione - in questo caso - almeno 4 caratteri per evitare che il ripiazzamento del carattere condizioni anche la prima lettera "z" della stringa: |
− | + | Public Sub Main() | |
Dim s As String = "abczafczafgzhil" | Dim s As String = "abczafczafgzhil" | ||
− | + | s = Replace(s, "zafg", " afg") | |
− | + | Print s | |
− | + | End | |
==Uso delle funzioni ''Left( )'' e ''Right( )''== | ==Uso delle funzioni ''Left( )'' e ''Right( )''== | ||
− | Mostriamo un semplice esempio di quest'altra modalità: <SUP>&# | + | Mostriamo un semplice esempio di quest'altra modalità che fa uso di ben tre funzioni Stringa, seppur quelle fondamentali risultino essere "Left()" e "Right()": <SUP>[[[#Note|nota 2]]]</sup> |
− | + | Public Sub Main() | |
Dim s, sValore1, sValore2 As String | Dim s, sValore1, sValore2 As String | ||
− | + | s = "aaazbbbzccczddd" | |
− | + | sValore1 = Left(s, 7) | |
− | + | sValore2 = Right(s, 7) | |
− | + | Print sValore1 & Space(1) & sValore2 | |
− | + | End | |
==Uso di un vettore di tipo ''Byte[ ]''== | ==Uso di un vettore di tipo ''Byte[ ]''== | ||
− | Questa modalità prevede l'uso di una variabile vettoriale di tipo | + | Questa modalità prevede l'uso di una variabile vettoriale di tipo "Byte[]". |
− | Basterà caricare in detta variabile mediante il Metodo | + | Basterà caricare in detta variabile mediante il Metodo ".FromString()" l'intera stringa, quindi cambiare il valore dell'elemento corrispondente al carattere da modificare. In fine riconvertire in stringa mediante il Metodo ".ToString()". |
Esempio pratico: | Esempio pratico: | ||
− | + | Public Sub Main() | |
Dim s As String = "aaazbbbzccczddd" | Dim s As String = "aaazbbbzccczddd" | ||
Dim bb As Byte[] | Dim bb As Byte[] | ||
− | + | bb = Byte[].FromString(s) | |
− | + | bb[7] = 32 | |
− | + | Print bb.ToString(0, bb.Count) | |
− | + | End | |
==Uso dei ''Memory Stream''== | ==Uso dei ''Memory Stream''== | ||
Questa modalità è più complessa, e prevede l'azione in scrittura su un Puntatore ad una variabile di tipo ''Stringa'' mediante i ''Memory Stream'': | Questa modalità è più complessa, e prevede l'azione in scrittura su un Puntatore ad una variabile di tipo ''Stringa'' mediante i ''Memory Stream'': | ||
− | + | Public Sub Main() | |
Dim p As Pointer | Dim p As Pointer | ||
Riga 82: | Riga 82: | ||
Dim s As String | Dim s As String | ||
− | <FONT Color=gray>' '' | + | <FONT Color=gray>' ''Assegna del testo alla variabile di tipo "String":''</font> |
− | + | s = "aaazbbbzccczddd" | |
− | <FONT Color=gray>' '' | + | <FONT Color=gray>' ''Assegna l'indirizzo di memoria della variabile "s" ad una variabile di tipo Puntatore:''</font> |
− | + | p = VarPtr(s) | |
− | <FONT Color=gray>' '' | + | <FONT Color=gray>' ''Genera dalla variabile "Puntatore" una variabile di tipo "Stream" in scrittura:''</font> |
− | + | st = Memory p For Write | |
− | <FONT Color=gray>' '' | + | <FONT Color=gray>' ''Scrive ora il valore del codice ASCII corrispondente allo "spazio" nel byte di indice 7 dell'area di memoria puntata dal Puntatore:''</font> |
− | + | Seek #st, 7 | |
− | + | Write #st, &20 As Byte | |
− | <FONT Color=gray>' '' | + | <FONT Color=gray>' ''Chiude il flusso:''</font> |
− | + | st.Close | |
− | <FONT Color=gray>' ''... | + | <FONT Color=gray>' ''...mostra nella variabile "s" la modifica apportata:''</font> |
− | + | Print s | |
− | + | ||
− | + | End | |
− | |||
Versione attuale delle 07:46, 24 giu 2023
Per modificare un carattere all'interno di una data stringa, è possibile adottare diverse modalità.
Indice
Uso della funzione Mid( )
La modalità più semplice è quella che prevede la funzione Mid( ), la quale è preposta ad individuare appunto uno o più caratteri in una stringa. [ Nota 1]
Mostriamo un semplice esempio, nel quale avendo questa unica stringa "aaazbbbzccczddd", si modificherà la seconda lettera "z" in uno spazio usando appunto la funzione "Mid()":
Public Sub Main() Dim s As String = "aaazbbbzccczddd" Mid(s, 8, 1) = " " Print s End
Uso della funzione Replace()
Un'altra modalità è rappresentata dall'uso della funzione "Replace( )". [nota 1]
Esempio pratico:
Public Sub Main() Dim s As String = "aaazbbbzccczddd" s = Replace(s, "zc", " c") Print s End
Va sottolineato che l'uso della funzione "Replace()" esige l'esatta distinzione ed individuazione del carattere da modificare. Qualora, come nell'esempio precedente, l'individuazione del carattere necessiti di inserire nel secondo parametro della funzione il carattere, da cambiare, accompagnato da qualche altro carattere precedente o seguente, se dovesse paventare il rischio di identicità con altre parti della stringa, è opportuno formare un adeguato gruppo di caratteri distintivi.
Così dunque se avessimo la seguente stringa "abczabczafgzhil ", e volessimo trasformare la seconda "z" in uno spazio, saremmo costretti a prendere in considerazione - in questo caso - almeno 4 caratteri per evitare che il ripiazzamento del carattere condizioni anche la prima lettera "z" della stringa:
Public Sub Main() Dim s As String = "abczafczafgzhil" s = Replace(s, "zafg", " afg") Print s End
Uso delle funzioni Left( ) e Right( )
Mostriamo un semplice esempio di quest'altra modalità che fa uso di ben tre funzioni Stringa, seppur quelle fondamentali risultino essere "Left()" e "Right()": [nota 2]
Public Sub Main() Dim s, sValore1, sValore2 As String s = "aaazbbbzccczddd" sValore1 = Left(s, 7) sValore2 = Right(s, 7) Print sValore1 & Space(1) & sValore2 End
Uso di un vettore di tipo Byte[ ]
Questa modalità prevede l'uso di una variabile vettoriale di tipo "Byte[]".
Basterà caricare in detta variabile mediante il Metodo ".FromString()" l'intera stringa, quindi cambiare il valore dell'elemento corrispondente al carattere da modificare. In fine riconvertire in stringa mediante il Metodo ".ToString()".
Esempio pratico:
Public Sub Main() Dim s As String = "aaazbbbzccczddd" Dim bb As Byte[] bb = Byte[].FromString(s) bb[7] = 32 Print bb.ToString(0, bb.Count) End
Uso dei Memory Stream
Questa modalità è più complessa, e prevede l'azione in scrittura su un Puntatore ad una variabile di tipo Stringa mediante i Memory Stream:
Public Sub Main() Dim p As Pointer Dim st As Stream Dim s As String ' Assegna del testo alla variabile di tipo "String": s = "aaazbbbzccczddd" ' Assegna l'indirizzo di memoria della variabile "s" ad una variabile di tipo Puntatore: p = VarPtr(s) ' Genera dalla variabile "Puntatore" una variabile di tipo "Stream" in scrittura: st = Memory p For Write ' Scrive ora il valore del codice ASCII corrispondente allo "spazio" nel byte di indice 7 dell'area di memoria puntata dal Puntatore: Seek #st, 7 Write #st, &20 As Byte ' Chiude il flusso: st.Close ' ...mostra nella variabile "s" la modifica apportata: Print s End
Note
[1] Questa modalità è stata proposta dal membro Gianluigi del forum gambas-it.org .
[2] Questa modalità è stata proposta dal membro tornu del forum gambas-it.org .