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, W.A.) 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



Users browsing this thread: 1 Guest(s)