Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13
  1. #1

    [VB6] spezzare una strigna

    ciao ragazzi!
    ho una stringa di testo, di lunghezza di volta in volta variabile, che dovrei spezzare in due o più parti....
    Però non vorrei "spezzare" le parole, mi basta dividerle dove c'è lo spazio tra una e l'altra.
    vi posto un esempio:
    "questa è la stringa che io dovrei spezzare per farla leggere bene"
    "questa è la stringa che
    io dovrei spezzare
    per farla leggere bene"

    mi potreste dare un aiuto?

  2. #2
    Con la funzione Split(testo, " ") dividi la stringa in un array in corrispondenza di ogni spazio.
    http://www.firesoftweb.it - Servizi gratuiti per il tuo sito web: forum, guestbook, contatori visite...

  3. #3
    Originariamente inviato da dado86ssj
    Con la funzione Split(testo, " ") dividi la stringa in un array in corrispondenza di ogni spazio.
    conosco lo split, mi chiedevo se c'era qualcosa di più performante, che gli dai la lunghezza prestabilita e lui ti spezza la stringa allo spazio più vicino

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    No ... non esiste ... devi scrivere il codice tu ...

  5. #5
    Originariamente inviato da oregon
    No ... non esiste ... devi scrivere il codice tu ...
    sospettavo....
    suggerimenti?
    oltre a splittare per spazi?

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Ottenuta la posizione, utilizza la Instr e la InstrRev e analizza i due risultati ...

  7. #7
    Ok, ti ho scritto una funzione che fa quello che chiedi

    codice:
        Function spezza_stringa(ByVal testo As String, ByVal nchar As Integer)
            Dim i, cont, inizio, chr_finali As Integer
            Dim car As Char
            Dim chr_superati As Boolean = False
            Dim array_testo(0)
            inizio = 1
    
            For i = 1 To Len(testo)
                car = Mid(testo, i, 1)
                cont = cont + 1
                If cont >= nchar Then chr_superati = True
                If chr_superati And car = " " Then
                    ReDim Preserve array_testo(UBound(array_testo) + 1)
                    chr_finali = Len(Mid(testo, i))
                    array_testo(UBound(array_testo)) = Mid(testo, inizio, Len(testo) - inizio - chr_finali + 1)
                    inizio = i + 1
                    chr_superati = False
                    cont = 0
                End If
            Next
            ReDim Preserve array_testo(UBound(array_testo) + 1)
            array_testo(UBound(array_testo)) = Mid(testo, inizio)
            Return array_testo
        End Function
    Richiamala con:
    spezza_stringa("testo da dividere", caratteri_dopo_cui_vuoi_spezzare_il_testo)

    La funzione restituisce un array con la stringa splittata allo spazio successivo al numero di caratteri indicato.
    Ciao
    http://www.firesoftweb.it - Servizi gratuiti per il tuo sito web: forum, guestbook, contatori visite...

  8. #8
    Con questo codice vai a capo non contando i caratteri, ma stabilendo una larghezza massima (per esempio N millimetri) di un box che conterrà il testo. Utilizzo l'oggetto printer per ottenere la lunghezza della frase. Restituisce un array dove ogni elemento corrisponde ad una riga. L'ho dovuto creare per stampare su delle etichette adesive molto strette. La variabile AreaDiStampaOrizzontale non è dichiarata nella funzione perchè è pubblica, volendo puoi farla passare come paramentro. Se lu usi ricordati di impostare l'unità di misura in mm col codice "printer.scalemode = 6"

    codice:
    Private Function DividiInRighe(Stringa As String, Font As String, Dimensione As Double, Grassetto As Integer) As String()
        Dim NumeroDiRighe As Integer
        Dim i As Integer
        Dim Vettore
        Dim Righe() As String
        
        Vettore = Split(Stringa, " ")
        
        Printer.FontName = Font
        If Grassetto = 1 Then
            Printer.FontBold = True
        Else
            Printer.FontBold = False
        End If
        Printer.FontSize = Dimensione
        
        NumeroDiRighe = 1
        ReDim Preserve Righe(1)
        
        For i = 0 To UBound(Vettore)
            Righe(NumeroDiRighe) = Trim(Righe(NumeroDiRighe) & " " & Vettore(i))
            If Printer.TextWidth(Righe(NumeroDiRighe)) > AreaDiStampaOrizzontale Then
                Righe(NumeroDiRighe) = Trim(Left(Righe(NumeroDiRighe), Len(Righe(NumeroDiRighe)) - Len(Vettore(i))))
                NumeroDiRighe = NumeroDiRighe + 1
                ReDim Preserve Righe(NumeroDiRighe)
                Righe(NumeroDiRighe) = Vettore(i)
            End If
        Next i
        DividiInRighe = Righe
    End Function

  9. #9
    Lo so che la mia funzione va a capo non rispettando i caratteri, ma io l'ho fatta come l'ha chiesta SuperMariano81

    Originariamente inviato da SuperMariano81
    conosco lo split, mi chiedevo se c'era qualcosa di più performante, che gli dai la lunghezza prestabilita e lui ti spezza la stringa allo spazio più vicino
    http://www.firesoftweb.it - Servizi gratuiti per il tuo sito web: forum, guestbook, contatori visite...

  10. #10
    Utente di HTML.it L'avatar di LMondi
    Registrato dal
    Sep 2004
    Messaggi
    1,291
    Ciao Luciano79,
    la funzione che hai postato è interessante, ma non ho capito come si può utilizzare nel caso di un testo formato da più righe.
    Poniamo di aprire un file txt con:
    FF = FreeFile
    Open "D:\Elaborazioni\ProvaStampa.txt"
    For Input As #FF
    X = 0
    Do Until EOF(FF)
    Line Input #FF, prova(X)
    X = X + 1
    Loop
    Close #FF
    Come si richiama la tua funz ?
    LM

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.