Riedizione di Mid$ :
Public Sub Main()
Dim s As String = "aaazbbbzccczddd"
Mid$(s, 8, 1) = " "
Print s
End
:ciao:
Altro uso di Mid con vettore:
Public Sub Main()
Dim s As String = "aaazbbbzccczddd"
Dim c As String
Dim ss As New String[]
Dim i As Byte
For i = 1 To Len(s)
c = Mid(s, i, 1)
If i = 8 Then c = " "
ss.Push(c)
Next
For i = 0 To ss.Max
Print ss[i];
Next
End
:ciao:
Volendo usare Replace:
Public Sub Main()
Dim s As String = "aaazbbbzccczddd"
s = Replace(s, "zc", " c")
Print s
End
:ciao:
Un metodo come un'altro
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
:ciao:
Un pò lunghino ma funge:
Dim i, conto As Byte
Dim stringa$ As String = "aaazbbbzccczddd"
For i = 1 To Len(stringa$)
If Mid$(stringa$, i, 1) = "z" Then Inc conto
If conto = 2 Then
stringa$ = Replace(stringa$, "bz", "b ")
Endif
Next
Print stringa$
Per questo quesito mi era venuto in mente che si sarebbe anche potuta usare la funzione scan.
Allora ho scritto questo:
Public Sub Main()
Dim i As Byte
Dim ss As String[]
Dim s As String = "aaazbbbzccczddd"
Dim z As String
Print s
For i = 1 To Len(s)
z &= "*"
Next
ss = Scan(s, z)
ss.Delete(7)
ss.Add(" ", 7)
For Each z In ss
Print z;
Next
End
Ma non funziona, mi da questo risultato:
aaazbbbzccczddd
aaazbbbzccczddd
Vale a dire che non cancella e aggiunge lo spazio all'inizio.
Però se io uso il vettore senza popolarlo con scan allora funziona:
Public Sub Main()
Dim i As Byte
Dim ss As String[] = ["a", "a", "a", "z", "b", "b", "b", "z", "c", "c", "c", "z", "d", "d", "d"]
Dim s As String
Dim z As String = "aaazbbbzccczddd"
Print z
ss.Delete(7)
ss.Add(" ", 7)
For Each s In ss
Print s;
Next
End
E questo è l'atteso risultato:
aaazbbbzccczddd
aaazbbb ccczddd
Secondo voi perché accade questo?
:ciao:
Guarda che cosa hai combinato: ;D
Public Sub Main()
Dim i As Byte
Dim ss As String[]
Dim s As String = "aaazbbbzccczddd"
Dim z As String
Print s
For i = 1 To Len(s)
z &= "*"
Next
ss = Scan(s, z)
For i = 0 To ss.Max
Print i,
If IsNull(ss[i]) Then
Print "Nullo"
Else
Print ss[i]
Endif
Next
End
Pertanto, andando a piazzare il valore ASCII 32 nel byte di indice 7, succede che...... (http://forum.ubuntu-it.org/images/smilies/whistle.gif)
Alla funzione Scan( ) c'avevo pensato pure io, ma credo che non sia utilizzabile proficuamente in questo caso. :-X