Newsgroup: it.comp.lang.visual-basic
Titolo: ?Spezzare una stringa

Devo spezzare una che ha una lung. max di 60 caratteri , in due o max tre
righe.
La riga o le righe devono essere spezzate agli spazi e non possono essere
piů lunghe di 30 caratteri.
Ho fatto questa function, un pň rudimentale ma pare che funzioni.
Dategli una occhiata ed eventuali accorgimenti.
Oppure se avete qualcosa di meglio
Private Function SpezzaRiga(Testo As String) As String
    Dim Char As String * 1
    Dim PrimaRiga As String
    Dim SecondaRiga As String
    Dim I As Integer
    Dim xPos As Integer
    Do While I <= Len(Testo)
        I = I + 1
        Char = Mid$(Testo, I, 1)
        PrimaRiga = PrimaRiga & Char  'Questa riga mi serve nel caso in cui
la riga non avesse spazi
        If Char = " " Then
            If (I > xPos And I <= 31) Then
                xPos = I
                PrimaRiga = Mid$(Testo, 1, xPos - 1) & "ś"
            End If
        End If
    Loop
    PrimaRiga = Mid$(PrimaRiga, 1, xPos)
    Testo = Mid$(Testo, xPos + 1)
    I = 0: xPos = 0
    Do While I <= Len(Testo)
        I = I + 1
        Char = Mid$(Testo, I, 1)
        SecondaRiga = SecondaRiga & Char
        If Char = " " Then
            If (I > xPos And I <= 31) Then
                xPos = I
                SecondaRiga = Mid$(Testo, 1, xPos - 1) & "ś"
            End If
        End If
    Loop
    SpezzaRiga = PrimaRiga & SecondaRiga
End Function
Al ritorno della funzione faccio uno split


Non sarebbe più semplice fare uno Split della riga (in modo da avere le 
singole parole) e poi fare un loop di join.
Nel loop, se la stringa concatenata più il pezzo successivo supera i 30 
caratteri anzichè giuntarlo con uno spazio lo giunti con un crlf.
Ciao

 Oppure se avete qualcosa di meglio
io lo split lo farei prima, così il codice è molto più snello...una cosa del
tipo:
Private Sub SpezzaRiga(Testo As String)
Dim i As Integer
Dim v As Integer
Dim righe(3) As String            'il 3 rappresenta il massimo numero di
righe
Dim temp_testo() As String
temp_testo = Split(Testo, " ")
v = 1
For i = 1 To UBound(temp_testo)
   If Len(righe(v)) + Len(temp_testo(i)) >= 30 Then
      v = v + 1
   End If
   If v > UBound(righe) Then
      Exit For
   Else
      righe(v) = righe(v) & temp_testo(i)
   End If
Next i
'controllo il risultato
For v = LBound(righe) To UBound(righe)
   Debug.Print righe(v)
Next v
End Sub
ciaociao

 Ciao
ciaociao

 For i = 1 To UBound(temp_testo)
ops.... metti 0 non 1!! ...
ciaociao

 wrote in message
news:brpcd0$5uovm$1...@ID-193795.news.uni-

Con il mio eviti il doppio ciclo :)
Chiaro che non si deve controllare > 30 ma (lunghezza riga - posizione del
primo carattere della riga) > 30
Ciao
--
Math Parser : 
http://www.neodatatype.net
Sito Comune : 
http://www.it-lang-vb.net

 Con il mio eviti il doppio ciclo :)
doppio ciclo?
what's doppio ciclo? ;-)
ciaociao


Cosa intendi per  (lunghezza riga - posizione del primo carattere della
riga) > 30
la riga splittata o la riga originale.
Carmelo

 ha scritto nel messaggio
news:brpc9n$621qc$1...@ID-193795.news.uni-berlin.de...

Se ti capita una stringa di 60 caratteri senza spazi, il ciclo ti da una
riga vuota e poi alla seconda riga ti mette la stringa.
Carmelo

 la riga splittata o la riga originale.
La riga concatenata di cui vai a controllare la lunghezza.
Se la concateni con crlf la seconda riga termina al 30° carattere della
seconda linea e non al 60° di tutto il testo.
