PRINT breaks up long strings that contain lots of spaces

General FreeBASIC programming questions.
Post Reply
cbruce
Posts: 166
Joined: Sep 12, 2007 19:13
Location: Dallas, Texas

PRINT breaks up long strings that contain lots of spaces

Post by cbruce »

Strange behavior with PRINT command:

PRINT outputs additional newlines when simply printing long strings that contain lots of spaces to the console.

Just execute these two PRINTs and copy the output from the console and paste it into an editor that can handle long strings. You will see that the X-string wraps (had returns inserted) and the Z-string does not.

Code: Select all

print "[X                    X X          X  X  X   XX       X X          X      X    XX   X X   X X      X        XX  X      X  X  X     X X  XX   XX   X    X   X   XX     X       XXXX X  XX   X    X       X    X  XX  X XX X     X        XXX X   X   XX        XXXX    XXXXX  XX X    XX X   X X X      X  X  X   XXXX      X     X      XX X XXX  X      XX XXX    X        X   X]"
print "[Z____________________Z_Z__________Z__Z__Z___ZZ_______Z_Z__________Z______Z____ZZ___Z_Z___Z_Z______Z________ZZ__Z______Z__Z__Z_____Z_Z__ZZ___ZZ___Z____Z___Z___ZZ_____Z_______ZZZZ_Z__ZZ___Z____Z_______Z____Z__ZZ__Z_ZZ_Z_____Z________ZZZ_Z___Z___ZZ________ZZZZ____ZZZZZ__ZZ_Z____ZZ_Z___Z_Z_Z______Z__Z__Z___ZZZZ______Z_____Z______ZZ_Z_ZZZ__Z______ZZ_ZZZ____Z________Z___Z]"
Tested with FreeBASIC 1.09 and 1.08.

Although the line breaks can be different, depending on the string, they always show up at the same points for any given string.

Any ideas as to why PRINT doesn't always output to the console as expected?

Thanks,
CBruce
fxm
Moderator
Posts: 12107
Joined: Apr 22, 2009 12:46
Location: Paris suburbs, FRANCE

Re: PRINT breaks up long strings that contain lots of spaces

Post by fxm »

No problem with Windows 10 and notepad.exe.
SARG
Posts: 1764
Joined: May 27, 2005 7:15
Location: FRANCE

Re: PRINT breaks up long strings that contain lots of spaces

Post by SARG »

No problem here also W10 and another editor.

@cbruce Windows or Linux ?
dodicat
Posts: 7983
Joined: Jan 10, 2006 20:30
Location: Scotland

Re: PRINT breaks up long strings that contain lots of spaces

Post by dodicat »

With word wrap in notepad the first line of X's and Z's remains exact, the second line is one space off, the third two spaces off . . .
Similar with wordpad wrap to ruler, (but not exactly the same)
But using the crt puts and printf has the same effect in each also.

Same offsets with print directly to a file.
Win 10.
fxm
Moderator
Posts: 12107
Joined: Apr 22, 2009 12:46
Location: Paris suburbs, FRANCE

Re: PRINT breaks up long strings that contain lots of spaces

Post by fxm »

fxm wrote: Jul 18, 2022 4:33 No problem with Windows 10 and notepad.exe.
I used notepad with word wrap turned off.
dodicat
Posts: 7983
Joined: Jan 10, 2006 20:30
Location: Scotland

Re: PRINT breaks up long strings that contain lots of spaces

Post by dodicat »

With no word wrap everything matches here.

Word wrap (notepad) wraps differently with spaces and visible characters.
After all, words are generally separated by a space.
I tested on C also, same results as fb.
cbruce
Posts: 166
Joined: Sep 12, 2007 19:13
Location: Dallas, Texas

Re: PRINT breaks up long strings that contain lots of spaces

Post by cbruce »

I am running Windows 10.

Here's what my output is like:

Code: Select all

[X                    X X          X  X  X   XX       X X          X      X    XX   X X   X X      X        XX  X      X  X  X     X X  XX   XX   X    X   X   XX     X       XXXX X  XX   X    X       X    X  XX  X XX X     X        XXX X   X   XX        XXXX    XXXXX  XX X 
   XX X   X X X      X  X  X   XXXX      X     X      XX X XXX  X      XX XXX    X        X   X]                                         
[Z____________________Z_Z__________Z__Z__Z___ZZ_______Z_Z__________Z______Z____ZZ___Z_Z___Z_Z______Z________ZZ__Z______Z__Z__Z_____Z_Z__ZZ___ZZ___Z____Z___Z___ZZ_____Z_______ZZZZ_Z__ZZ___Z____Z_______Z____Z__ZZ__Z_ZZ_Z_____Z________ZZZ_Z___Z___ZZ________ZZZZ____ZZZZZ__ZZ_Z____ZZ_Z___Z_Z_Z______Z__Z__Z___ZZZZ______Z_____Z______ZZ_Z_ZZZ__Z______ZZ_ZZZ____Z________Z___Z]                                         
For me, the line of X's gets broken into two lines.

Some more examples showing where the line breaks happen at different places for different strings:

Code: Select all


print "[ dd  d dd   d ddd     d   dd d      d d       dd      d dd dddd  d dd   d       d      d     ddddd   d d  d  dd dd   d    dd  d    d dd  dd   ddd          d    d d d  dd ddd            d dd      dd     d      dd d     dddd  d d  d        d   d  d  d d        dd         d   dd  d   d d     d    d  dd ddd    d  dd   dddd d   dd        d   d  dd  d   dd   dd    d    d ]"
print "[   0  0   0       0 0         0    0   0  00      0                    0   0                             0        00         0 00                       0             0  0             00                0                                      0      0         0              00               0                    0                  0 0      0 0           0    000        ]"
print "[    a    a a a   a a    aa  a  aaa       a      aa aa     a    aa    aa   a aa   aa a a a a a      aa a a           a  aa        a         a      aaaa a a  aa   a a             a aa        aa aaa  aa a  a aa        a a     a a aa a   a aa   a    a  a aa     a       aa            aa    a a  aaa  a            a   a a      aaa           a    a           a      a a aa  ]"
print "[X                    X X          X  X  X   XX       X X          X      X    XX   X X   X X      X        XX  X      X  X  X     X X  XX   XX   X    X   X   XX     X       XXXX X  XX   X    X       X    X  XX  X XX X     X        XXX X   X   XX        XXXX    XXXXX  XX X    XX X   X X X      X  X  X   XXXX      X     X      XX X XXX  X      XX XXX    X        X   X]"
print "[Z____________________Z_Z__________Z__Z__Z___ZZ_______Z_Z__________Z______Z____ZZ___Z_Z___Z_Z______Z________ZZ__Z______Z__Z__Z_____Z_Z__ZZ___ZZ___Z____Z___Z___ZZ_____Z_______ZZZZ_Z__ZZ___Z____Z_______Z____Z__ZZ__Z_ZZ_Z_____Z________ZZZ_Z___Z___ZZ________ZZZZ____ZZZZZ__ZZ_Z____ZZ_Z___Z_Z_Z______Z__Z__Z___ZZZZ______Z_____Z______ZZ_Z_ZZZ__Z______ZZ_ZZZ____Z________Z___Z]"                                         

Code: Select all


[ dd  d dd   d ddd     d   dd d      d d       dd      d dd dddd  d dd   d       d      d     ddddd   d d  d  dd dd   d    dd  d    d dd
 dd   ddd          d    d d d  dd ddd            d dd      dd     d      dd d     dddd  d d  d        d   d  d  d d        dd         d
 dd  d   d d     d    d  dd ddd    d  dd   dddd d   dd        d   d  dd  d   dd   dd    d    d ]
[   0  0   0       0 0         0    0   0  00      0                    0   0                             0        00         0 00
                0             0  0             00                0                                      0      0         0              00               0                    0                  0 0      0 0           0    000        ]
[    a    a a a   a a    aa  a  aaa       a      aa aa     a    aa    aa   a aa   aa a a a a a      aa a a           a  aa        a
   a      aaaa a a  aa   a a             a aa        aa aaa  aa a  a aa        a a     a a aa a   a aa   a    a  a aa     a       aa
       aa    a a  aaa  a            a   a a      aaa           a    a           a      a a aa  ]
[X                    X X          X  X  X   XX       X X          X      X    XX   X X   X X      X        XX  X      X  X  X     X X  XX   XX   X    X   X   XX     X       XXXX X  XX   X    X       X    X  XX  X XX X     X        XXX X   X   XX        XXXX    XXXXX  XX X 
   XX X   X X X      X  X  X   XXXX      X     X      XX X XXX  X      XX XXX    X        X   X]                                         
[Z____________________Z_Z__________Z__Z__Z___ZZ_______Z_Z__________Z______Z____ZZ___Z_Z___Z_Z______Z________ZZ__Z______Z__Z__Z_____Z_Z__ZZ___ZZ___Z____Z___Z___ZZ_____Z_______ZZZZ_Z__ZZ___Z____Z_______Z____Z__ZZ__Z_ZZ_Z_____Z________ZZZ_Z___Z___ZZ________ZZZZ____ZZZZZ__ZZ_Z____ZZ_Z___Z_Z_Z______Z__Z__Z___ZZZZ______Z_____Z______ZZ_Z_ZZZ__Z______ZZ_ZZZ____Z________Z___Z]                                         

Last edited by cbruce on Jul 18, 2022 16:43, edited 1 time in total.
dodicat
Posts: 7983
Joined: Jan 10, 2006 20:30
Location: Scotland

Re: PRINT breaks up long strings that contain lots of spaces

Post by dodicat »

Do you have width settings for the console?

Code: Select all



Sub changeconsolesize(cols As Long,lines As Long)
    Shell "MODE CON: COLS="+Str(cols)+ "LINES="+Str(lines)
End Sub
changeconsolesize(400,20)
print "[X                    X X          X  X  X   XX       X X          X      X    XX   X X   X X      X        XX  X      X  X  X     X X  XX   XX   X    X   X   XX     X       XXXX X  XX   X    X       X    X  XX  X XX X     X        XXX X   X   XX        XXXX    XXXXX  XX X    XX X   X X X      X  X  X   XXXX      X     X      XX X XXX  X      XX XXX    X        X   X]"
print "[Z____________________Z_Z__________Z__Z__Z___ZZ_______Z_Z__________Z______Z____ZZ___Z_Z___Z_Z______Z________ZZ__Z______Z__Z__Z_____Z_Z__ZZ___ZZ___Z____Z___Z___ZZ_____Z_______ZZZZ_Z__ZZ___Z____Z_______Z____Z__ZZ__Z_ZZ_Z_____Z________ZZZ_Z___Z___ZZ________ZZZZ____ZZZZZ__ZZ_Z____ZZ_Z___Z_Z_Z______Z__Z__Z___ZZZZ______Z_____Z______ZZ_Z_ZZZ__Z______ZZ_ZZZ____Z________Z___Z]"
sleep
 
Result:

Code: Select all

[X                    X X          X  X  X   XX       X X          X      X    XX   X X   X X      X        XX  X      X  X  X     X X  XX   XX   X    X   X   XX     X       XXXX X  XX   X    X       X    X  XX  X XX X     X        XXX X   X   XX        XXXX    XXXXX  XX X    XX X   X X X      X  X  X   XXXX      X     X      XX X XXX  X      XX XXX    X        X   X]
[Z____________________Z_Z__________Z__Z__Z___ZZ_______Z_Z__________Z______Z____ZZ___Z_Z___Z_Z______Z________ZZ__Z______Z__Z__Z_____Z_Z__ZZ___ZZ___Z____Z___Z___ZZ_____Z_______ZZZZ_Z__ZZ___Z____Z_______Z____Z__ZZ__Z_ZZ_Z_____Z________ZZZ_Z___Z___ZZ________ZZZZ____ZZZZZ__ZZ_Z____ZZ_Z___Z_Z_Z______Z__Z__Z___ZZZZ______Z_____Z______ZZ_Z_ZZZ__Z______ZZ_ZZZ____Z________Z___Z]
 
But whatever way I do it with no word wrap in wordpad, notepad and in powershell ise, I cannot recreate your result.
normal console
properties
Edit options
all the boxes ticked
Text Selection
both boxes ticked.

Code: Select all

[ dd  d dd   d ddd     d   dd d      d d       dd      d dd dddd  d dd   d       d      d     ddddd   d d  d  dd dd   d    dd  d    d dd  dd   ddd          d    d d d  dd ddd            d dd      dd     d      dd d     dddd  d d  d        d   d  d  d d        dd         d   dd  d   d d     d    d  dd ddd    d  dd   dddd d   dd        d   d  dd  d   dd   dd    d    d ]
[   0  0   0       0 0         0    0   0  00      0                    0   0                             0        00         0 00                       0             0  0             00                0                                      0      0         0              00               0                    0                  0 0      0 0           0    000        ]
[    a    a a a   a a    aa  a  aaa       a      aa aa     a    aa    aa   a aa   aa a a a a a      aa a a           a  aa        a         a      aaaa a a  aa   a a             a aa        aa aaa  aa a  a aa        a a     a a aa a   a aa   a    a  a aa     a       aa            aa    a a  aaa  a            a   a a      aaa           a    a           a      a a aa  ]
[X                    X X          X  X  X   XX       X X          X      X    XX   X X   X X      X        XX  X      X  X  X     X X  XX   XX   X    X   X   XX     X       XXXX X  XX   X    X       X    X  XX  X XX X     X        XXX X   X   XX        XXXX    XXXXX  XX X    XX X   X X X      X  X  X   XXXX      X     X      XX X XXX  X      XX XXX    X        X   X]
[Z____________________Z_Z__________Z__Z__Z___ZZ_______Z_Z__________Z______Z____ZZ___Z_Z___Z_Z______Z________ZZ__Z______Z__Z__Z_____Z_Z__ZZ___ZZ___Z____Z___Z___ZZ_____Z_______ZZZZ_Z__ZZ___Z____Z_______Z____Z__ZZ__Z_ZZ_Z_____Z________ZZZ_Z___Z___ZZ________ZZZZ____ZZZZZ__ZZ_Z____ZZ_Z___Z_Z_Z______Z__Z__Z___ZZZZ______Z_____Z______ZZ_Z_ZZZ__Z______ZZ_ZZZ____Z________Z___Z]
 
Last edited by dodicat on Jul 18, 2022 17:05, edited 1 time in total.
cbruce
Posts: 166
Joined: Sep 12, 2007 19:13
Location: Dallas, Texas

Re: PRINT breaks up long strings that contain lots of spaces

Post by cbruce »

MODE CON: is cool @dodicat! Thanks!

For later searchers... after you've copied the data from the resized console... don't forget to reset the console size before exiting your program. Mine is normally 150w x 64h, so I just gave it this after I was done:

Code: Select all

changeconsolesize(150,64)
Here's a full example:

Code: Select all

''Example of temporarily changing console size in a program:
Sub GetConsoleSize(byref iCols As Long, byref iRows As Long)
  dim iW as long
  iW = width
  iCols = LoWord(iW)
  iRows = HiWord(iW)
End Sub
Sub ChangeConsoleSize(iCols As Long, iRows As Long)
  Shell "MODE CON: COLS="+Str(iCols)+ "LINES="+Str(iRows)
End Sub
''
dim iCols As Long, iRows As Long
GetConsoleSize(iCols, iRows)
ChangeConsoleSize(400, 64)
    ''Do something here that needed a different console size...
    'print "[X                    X X          X  X  X   XX       X X          X      X    XX   X X   X X      X        XX  X      X  X  X     X X  XX   XX   X    X   X   XX     X       XXXX X  XX   X    X       X    X  XX  X XX X     X        XXX X   X   XX        XXXX    XXXXX  XX X    XX X   X X X      X  X  X   XXXX      X     X      XX X XXX  X      XX XXX    X        X   X]"
    'print "[Z____________________Z_Z__________Z__Z__Z___ZZ_______Z_Z__________Z______Z____ZZ___Z_Z___Z_Z______Z________ZZ__Z______Z__Z__Z_____Z_Z__ZZ___ZZ___Z____Z___Z___ZZ_____Z_______ZZZZ_Z__ZZ___Z____Z_______Z____Z__ZZ__Z_ZZ_Z_____Z________ZZZ_Z___Z___ZZ________ZZZZ____ZZZZZ__ZZ_Z____ZZ_Z___Z_Z_Z______Z__Z__Z___ZZZZ______Z_____Z______ZZ_Z_ZZZ__Z______ZZ_ZZZ____Z________Z___Z]"
''Wait for user to copy the console contents, or whatever...
sleep
''Reset the console size to original values.
ChangeConsoleSize(iCols, iRows)
Post Reply