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

Da Gambas-it.org - Wikipedia.
 
(5 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>&#91;[[#Note| Nota 1]]&#93;</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>&#91;[[#Note| Nota 1]]&#93;</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 ''Mid( )'':
+
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()
+
  Public Sub Main()
 
    
 
    
 
   Dim s As String = "aaazbbbzccczddd"
 
   Dim s As String = "aaazbbbzccczddd"
 
    
 
    
  Mid$(s, 8, 1) = " "
+
  Mid(s, 8, 1) = " "
 
    
 
    
  Print s
+
  Print s
 
    
 
    
  '''End'''
+
  End
 +
 
 +
==Uso della funzione Replace()==
 +
Un'altra modalità è rappresentata dall'uso della funzione "[[Replace|Replace( )]]". <SUP>&#91;[[#Note|nota 1]]&#93;</sup>
 +
 
 +
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.
 +
<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"
 +
 
 +
  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()": <SUP>&#091;[[#Note|nota 2]]&#093;</sup>
 +
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[ ]''==
 
==Uso di un vettore di tipo ''Byte[ ]''==
Questa modalità prevede l'uso di una variabile vettoriale 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( )''.
+
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()
+
  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 = Byte[].FromString(s)
 
      
 
      
    bb[7] = 32
+
  bb[7] = 32
 
    
 
    
    Print bb.ToString(0, bb.Count)
+
  Print bb.ToString(0, bb.Count)
 
    
 
    
  '''End'''
+
  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()   
+
  Public Sub Main()   
 
   
 
   
 
   Dim p As Pointer   
 
   Dim p As Pointer   
Riga 43: Riga 82:
 
   Dim s As String   
 
   Dim s As String   
 
    
 
    
  <FONT Color=gray>' ''Assegnamo del testo alla variabile di tipo "String":''</font>
+
  <FONT Color=gray>' ''Assegna del testo alla variabile di tipo "String":''</font>
  s = "aaazbbbzccczddd"   
+
  s = "aaazbbbzccczddd"   
 
      
 
      
  <FONT Color=gray>' ''Assegnamo l'indirizzo di memoria della variabile "s" ad una variabile di tipo Puntatore:''</font>
+
  <FONT Color=gray>' ''Assegna l'indirizzo di memoria della variabile "s" ad una variabile di tipo Puntatore:''</font>
  p = VarPtr(s)
+
  p = VarPtr(s)
 
   
 
   
  <FONT Color=gray>' ''Generiamo dalla variabile "Puntatore" una variabile di tipo "Stream" in scrittura:''</font>
+
  <FONT Color=gray>' ''Genera dalla variabile "Puntatore" una variabile di tipo "Stream" in scrittura:''</font>
  st = Memory p For Write   
+
  st = Memory p For Write   
 
    
 
    
  <FONT Color=gray>' ''Scriviamo ora il valore del codice ASCII corrispondente allo "spazio" nel byte di indice 7 dell'area di memoria puntata dal Puntatore:''</font>
+
  <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  
+
  Seek #st, 7  
  Write #st, &20 As Byte   
+
  Write #st, &20 As Byte   
 
    
 
    
  <FONT Color=gray>' ''Chiudiamo il flusso:''</font>
+
  <FONT Color=gray>' ''Chiude il flusso:''</font>
  st.Close
+
  st.Close
 
    
 
    
  <FONT Color=gray>' ''...vediamo nella variabile "s" la modifica apportata:''</font>
+
  <FONT Color=gray>' ''...mostra nella variabile "s" la modifica apportata:''</font>
  Print s
+
  Print s
 
+
 
  '''End'''
+
  End
 
 
  
  
Riga 69: Riga 107:
 
=Note=
 
=Note=
 
[1] Questa modalità è stata proposta dal membro [http://www.gambas-it.org/smf/index.php?action=profile;u=1249 Gianluigi] del forum gambas-it.org .
 
[1] Questa modalità è stata proposta dal membro [http://www.gambas-it.org/smf/index.php?action=profile;u=1249 Gianluigi] del forum gambas-it.org .
 +
 +
[2] Questa modalità è stata proposta dal membro [http://www.gambas-it.org/smf/index.php?action=profile;u=13 tornu] del forum gambas-it.org .

Versione attuale delle 06:46, 24 giu 2023

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 .