Differenze tra le versioni di "Modificare un carattere di una stringa"

Da Gambas-it.org - Wikipedia.
Riga 40: Riga 40:
  
 
==Uso delle funzioni ''Left( )'' e ''Right( )''==
 
==Uso delle funzioni ''Left( )'' e ''Right( )''==
Mostriamo un semplice esempio di quest'altra modalità: <SUP>&#91;[[#Note| Nota 2]]&#93;</sup>
+
Mostriamo un semplice esempio di quest'altra modalità che fa uso di ben tre funzioni Stringa: <SUP>&#91;[[#Note| Nota 2]]&#93;</sup>
 
  '''Public''' Sub Main()
 
  '''Public''' Sub Main()
 
    
 
    

Versione delle 16:20, 9 gen 2017

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: [ 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 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 .

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