Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
PrintW - print a long string, breaking it at the last space or hyphen before col. 79
#16
(04-19-2024, 12:32 AM)bplus Wrote:
(04-19-2024, 12:22 AM)PhilOfPerth Wrote:
(04-17-2024, 08:57 PM)mdijkens Wrote: If you test your code, always test the limits.
empty strings, long strings, etc.
Yours does not like long lines without dashes or spaces

Not sure I understand @mdijkens...  I thought word-wrap meant to wrap the next word if the line was too long. Are you refering to extra-long words, and splitting them at a syllable with a hiphen? Long strings are handled ok with my line-wrap, but, no it doesn't split words. And as for empty strings... why would you wrap them?  Confused

perhaps this
Code: (Select All)
PrintW "abcdefghijklmnopqrstuvwxyzAbcdefghijklmnopqrstuvwxyzAbcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz"
Sub PrintW (Msg$)
    Dim Temp$, Split$, breakspace%, breakdash%
    Temp$ = Msg$
    While Len(Temp$) > 79
        ''   Print Len(Temp$)
        Split$ = Left$(Temp$, 79)
        breakspace% = _InStrRev(Split$, " ")
        breakdash% = _InStrRev(Split$, "-")
        ''   Print Split$
        ''   Print breakspace%; breakdash%
        ''   Input X$
        If breakspace% > breakdash% Then
            Split$ = Left$(Split$, breakspace%)
            Temp$ = Mid$(Temp$, breakspace% + 1, Len(Temp$))
        Else
            Split$ = Left$(Split$, breakdash%)
            Temp$ = Mid$(Temp$, breakdash% + 1, Len(Temp$))
        End If
        ''  Print "*"; Len(Temp$)
        Print Split$
    Wend
    Print Temp$
End Sub
I get it. Thanks bplus. But how about this?
Code: (Select All)
SetScreen:
WWidth = 1120: WHeight = 820: Mode = 32: Size = 24
Screen _NewImage(WWidth, WHeight, Mode)
SetFont: f& = _LoadFont("C:\WINDOWS\fonts\courbd.ttf", Size, "monospace"): _Font f&
lhs = (_DesktopWidth - WWidth) / 2
_ScreenMove lhs, 86 '                                                                            centre display on screen

text$ = "abcdefghijklmnopqrstuvwxyzAbcdefghijklmnopqrstuv wxyzAbcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz"
text$ = text$ + text$
text$ = text$ + " " '                                                                              add space at end to catch remnant of text

LineStart = 1 '                                                                                    set linelength to be 80
LineEnd = LineStart + 79 '                                                                         LineEnd is 80
FindSpace:
Ch$ = Mid$(text$, LineEnd + 1, 1)
If Ch$ <> " " Then '                                                                               Ch$ is character after LineEnd
    LineEnd = LineEnd - 1 '                                                                        if it's NOT a space, move LineEnd left until it IS


    If LineEnd = LineStart Then
        Print Mid$(text$, LineStart, 80)
        LineStart = LineStart + 80
        LineEnd = LineStart + 79
    End If


    GoTo FindSpace
End If
Print Mid$(text$, LineStart, LineEnd - LineStart + 1) '                                            print line from linestart to lineend
LineStart = LineEnd + 2
If Mid$(text$, LineStart + 1, 1) = " " Then '                                                      if char after end is a space (it's not)
    LineStart = LineStart + 1 '                                                                    step past it for new LineStart position
End If
LineEnd = LineEnd + 80
If CsrLin > 30 Then Print: Print "Press a key for more": Sleep: Cls
If LineStart >= Len(text$) Then Sleep: System
GoTo FindSpace '                                                                                   go again if not at end of text
End

(added lines 20 to 24)
Of all the places on Earth, and all the planets in the Universe, I'd rather live here (Perth, Western Australia.) Big Grin
Please visit my Website at: http://oldendayskids.blogspot.com/
Reply


Messages In This Thread
RE: PrintW - print a long string, breaking it at the last space or hyphen before col. 79 - by PhilOfPerth - 04-19-2024, 01:00 AM

Possibly Related Threads…
Thread Author Replies Views Last Post
  STRING$ empowered with StringPatternFilling TempodiBasic 6 1,218 05-09-2025, 06:00 PM
Last Post: TempodiBasic
  Split String to Array Using Strtok (Attempt #2) SpriggsySpriggs 0 533 12-17-2024, 06:37 PM
Last Post: SpriggsySpriggs
  print file bplus 11 2,133 04-27-2024, 03:37 AM
Last Post: eoredson
  Fonts from String Patterns bplus 15 3,691 08-30-2023, 03:01 PM
Last Post: grymmjack
Music Fake space music mnrvovrfc 2 1,102 06-27-2023, 05:10 PM
Last Post: Petr

Forum Jump:


Users browsing this thread: 1 Guest(s)