Modificare un carattere di una stringa

Da Gambas-it.org - Wikipedia.

Per modificare un carattere all'interno di una data stringa, è possibile adottare diverse modalità.

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 .