PDA

View Full Version : Operazioni sul testo di una TextBox in Visual Basic 2005


ax89
20-06-2006, 18:25
Ciao a tutti,
ho una richiesta da fare ai programmatori + esperti. Ho un form con una TextBox, e vorrei che venissero apportate modifiche da me definite ad un testo che vado ad incollare nella suddetta textbox.
Ad esempio, vorrei che all'inizio di ogni riga, qualsiasi sia il numero di righe, venisse posto uno spazio. Come fare ?
E al contrario come rimuovere uno spazio (l'ultimo carattere) che si trova alla fine di ogni riga ?
In ultimo vorrei sapere come rimuovere il 7mo valore a partire dalla fine di ogni riga, considerando che per valore io intendo un numero composto in questa maniera:
15.00
e immaginando questa stringa:

bla bla bla 1200 3.00 4.00 5.00 6.00 5.00 7.00 8.50 (spazio)

vorrei che il risultato finale fosse questo:

(spazio) bla bla bla 1200 4.00 5.00 6.00 5.00 7.00 8.50

Mi sapete indicare il metodo da usare ?

mynos79
20-06-2006, 18:51
Questo è il codice del pulsante Button1 ... che prende e salva il testo in TextBox1 ... ho provato e funziona ... sempre che l' ultima riga non sia solamente una riga vuota (almeno questo caso no l'ho provato)

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim righe() As String
Dim parole() As String
righe = Split(TextBox1.Text, vbCrLf)
Dim i, k As Integer

For i = 0 To UBound(righe)
righe(i) = Trim(righe(i))
parole = Split(righe(i), " ")
righe(i) = ""
For k = 0 To (UBound(parole) - 7)
righe(i) &= parole(k) & " "
Next
For k = (UBound(parole) - 5) To UBound(parole)
righe(i) &= parole(k) & " "
Next
righe(i) = " " & Trim(righe(i))
Next

TextBox1.Text = ""
For i = 0 To UBound(righe)
TextBox1.Text &= righe(i) & vbCrLf
Next
End Sub

ax89
20-06-2006, 19:06
Grazie mille.
Funge come dovuto.

mynos79
20-06-2006, 19:13
Attento che ogni riga sia nel tuo formato, che non ci siano righe in mezzo o alla fine vuote o altro, perchè avendo fatto la routine in velocità non ho fatto il controllo di riga vuota o altri controlli sulle righe ...
Poi sicuramente si potrebbe ottimizzare ... ma appunto l' ho fatto in velocità tanto per darti una traccia.

Buono smanettamento in VB2005

ax89
21-06-2006, 10:33
Grazie tante.
Vorrei ancora sapere un'altra cosa: per cancellare ANCHE il 30mo valore a partire dalla fine come devo fare ?

mynos79
21-06-2006, 11:08
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim righe() As String
Dim parole() As String
righe = Split(TextBox1.Text, vbCrLf)
Dim i, k As Integer

For i = 0 To UBound(righe)
righe(i) = Trim(righe(i))
parole = Split(righe(i), " ")
righe(i) = ""
For k = 0 To (UBound(parole) - 30)
righe(i) &= parole(k) & " "
Next
For k = (UBound(parole) - 28) To (UBound(parole) - 7)
righe(i) &= parole(k) & " "
Next
For k = (UBound(parole) - 5) To UBound(parole)
righe(i) &= parole(k) & " "
Next
righe(i) = " " & Trim(righe(i))
Next

TextBox1.Text = ""
For i = 0 To UBound(righe)
TextBox1.Text &= righe(i) & vbCrLf
Next
End Sub

Al codice di ieri, ho aggiunto/modificato la parte in grassetto ...
In pratica il funzionamento è questo:
in un array parole() metto tutte i pezzi della riga spazi esclusi; poi visto che devi visualizzare di nuovo tutti i pezzi separati da spazio esclusi alcuni (esempio il 30° ed il 7° in questo caso) allora faccio un ciclo FOR che cicla tutto l' array dalla sua prima posizione (la 0) fino alla posizione prima del pezzo da non visualizzare (ovvero la 30° posizione a partire dall' ultimo) e ricomincio il ciclo FOR dalla posizione dopo quella del pezzo da non visualizzare fino a quella prima del prossimo pezzo da non visualizzare ... poi di nuovo il ciclo dalla posizione dopo il pezzo da non visualizzare fino alla fine; sembra complicato ma non è difficile.
La funzione Ubound(array) indica l' indice dell' ultimo elemento dell' array, sapendo che l' array parte da indice 0, Ubound indica l' indice n-1 ... per quello nel ciclo considero incluso anche la posizione Ubound(parole) - 30 perchè l' ultimo essendo n-1, quella posizione sarebbe n-31 e quindi proprio quella prima della 30° da scartare ... stesso discorso per il 7° ...
Beh prova a vedere se hai capito ...