Newsgroup: it.comp.lang.visual-basic
Titolo: dividere un testo in righe precise

Buon giorno, 
io dovrei creare una funzione che dato un testo di lunghezza variabile,
anche molto lungo, mi restituisca lo stesso suddiviso in righe di max 80
caratteri (devo controllare anche il fatto di non troncare le parole ma
di mandare a capo eventualmente il testo).
Non sono molto brava in questi algoritmi e so che spesso ci sono
funzioni di questo tipo già pronte. Qualcuno sa dove posso trovarla? Io
altrimenti lavorerei con Len, Mid (per trovare lo spazio), Right e Left
ma non so bene come impostarla, avete qualche suggerimento o qualche
esempio da cui trovare spunto o adattare?
grazie a tutti
Cristina
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 esempio da cui trovare spunto o adattare?
per trovare lo spazio, più che l'istruzione mid utilizzerei la funzione
instr, magari quella che lavora al contrario e che trova l'ultima occorrenza
di un carattere in una stringa....
Se ti va di svilupparti da sola la funzione ti do una mano volentieri, se
invece preferisci trovare la funzione già fatta, attendi con fiducia.
Salutoni
Sergio

Ho trovato la funzione che cercavo, e la mando nella speranza di
evitare notti insonni come le mie ultime...
questa funziona (come serviva a me!) su un db access che ha un campo
memo che deve essere "diviso" in stringhe da 80.
Gestisce il fatto che ci sia o meno lo spazio come 80esimo carattere, 
non l'"accapo", per quello sto ancora guardando. 
Ma nel frattempo mi ha risparmiato un mucchio di lavoro, perché stavo
facendo il lavoro manualmente per una grossa lacuna che ho nel gestire
piů di due contatori!
Grazie dell'interessamento e per una collaborazione per l'"accapo"
ci sono! 
grazie mille 
ciao
Cristina
Dim rst As Recordset
    Dim app As String, app1 As String
    Dim i As Long, j As Long
    Set rst = CurrentDb.OpenRecordset("tuatab")
    rst.MoveFirst
    i = 1
    Do Until i> Len(rst.Fields("campomemo"))
        app = Mid(rst.Fields("campomemo"), i, 30)
        If Right(app, 1) = " " Then
          Debug.Print app
          i = i + 30
        Else
          j = 0
          app1 = ""
          Do Until app1 = " "
            j = j + 1
            app1 = Mid(app, Len(app) - j, 1)
          Loop
          app = Mid(rst.Fields("campomemo"), i, 30 - j)
          Debug.Print app
          i = i + 30 - j
        End If
    Loop
    Set rst = Nothing


la routine che ho appena mandato spezza le righe in 30 caratteri!
(e non in 80)
scusate.. la fretta!


 (e non in 80)
e non solo questo, direi...... te le stampa nella finestra immediata, e solo
se sei in esecuzione all'interno dell'ide, quindi in una applicazione
"reale" non ha alcuna utilità.... inoltre fa questo lavoro solo sul primo
record del recordset..
supponiamo comunque che tutto questo sia dovuto al fatto che è solo un
esempio, e che tu sappia esattamente come modificarla per adattarla alle tue
reali esigenze.
Dirò subito che la routine, così come è fatta, non mi piace molto, in
particolare per il caso un cui l' ennesimo carattere della stringa non sia
uno spazio e quindi occorra scorrerla all'indietro, comunque....
per risolvere il problema dei ritorni a capo, supponendo che essi siano
codificati come vbcrlf, prima di elaborare la stringa utilizzerei la
funzione split per dividerla in un vettore in cui ogni elemento sia
costituito dalla "riga" così come era scritta nel memo, poi sottoporrei
ciascun elemento di questo array alla tua routine.
Salutoni
Sergio