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 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 carattera 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  
  
' Assegnamo del testo alla variabile di tipo "String":
  s = "aaazbbbzccczddd"  
   
' Assegnamo l'indirizzo di memoria della variabile "s" ad una variabile di tipo Puntatore:
  p = VarPtr(s)  

' Generiamo dalla variabile "Puntatore" una variabile di tipo "Stream" in scrittura:
  st = Memory p For Write  
 
' Scriviamo 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  
  
' Chiudiamo il flusso:
  st.Close  
  
' ...vediamo nella variabile "s" la modifica apportata:
  Print s  
  
End



Note

[1] Questa modalità è stata proposta dal membro Gianluigi del forum gambas-it.org .