Align columns: Difference between revisions

m
→‎(boxed output): added/changed come comments, added whitespace.
m (→‎(with output): changed comments, simplified some code.)
m (→‎(boxed output): added/changed come comments, added whitespace.)
Line 6,616:
 
===(boxed output)===
Note: This  this version boxes each column of output to better show the columns.
<lang rexx>/*REXX pgmprogram displays various (boxed)various alignments for words in an array of text strings. */
colssize= 0; size=0; widt.=0; cols= 0; t wid.=; 0; @.= /*zero or nullify some variables. */
t.1 = "Given$a$text$file$of$many$lines,$where$fields$within$a$line$"
/* [↓] some "text" lines. */
t.2 = "are$delineated$by$a$single$'dollar'$character,$write$a$program"
t.1 = "Given$a$text$file$of$many$lines,$where$fields$within$a$line$"
t.3 = "that$aligns$each$column$of$fields$by$ensuring$that$words$in$each$"
t.2 = "are$delineated$by$a$single$'dollar'$character,$write$a$program"
t.34 = "that$aligns$each$column$ofare$fieldsseparated$by$ensuringat$thatleast$words$in$eachone$space."
t.5 = "Further,$allow$for$each$word$in$a$column$to$be$either$left$"
t.4 = "column$are$separated$by$at$least$one$space."
t.6 = "justified,$right$justified,$or$center$justified$within$its$column."
t.5 = "Further,$allow$for$each$word$in$a$column$to$be$either$left$"
do r=1 while t.r\=='' /* [↓] process someall the "text" lines. */
t.6 = "justified,$right$justified,$or$center$justified$within$its$column."
_= strip(t.r,,'$') /*strip [↑]leading & atrailing nulldollar line is the end of text.signs*/
do r=1 while t.r\=='' do c=1 until _=='' /* [↓] process alleach of the text lineswords. */
_=strip(t.r,,'$') parse var _ @.r.c '$' _ /*stripextract the words leadingfrom &a trailingline dollarof signstext*/
do wid.c=1 until _=='' max(wid.c, length(@.r.c) ) /*find [↓]the maximum processword each of the wordswidth. */
parse end var _ @.r./*c '$' _*/
cols= max(cols, c) wid.c=max(wid.c, length(@.r.c)) /*finduse the maximum wordCOLS widthfound. */
end /*c*/
cols=max(cols,c) /*use the maximum COLS found. */
end /*r*/
 
do k=1 for cols; size= size + wid.k; end end /*find the width of the biggest line. */
rows= r -1 1 /*adjust ROWS because of the DO loop.*/
do j=1 for 3; say; say say /*show two blank lines for a separator.*/
say center(word('left right center', j) "aligned", size+cols+1, "═") /*show title*/
 
do r=0 to rows; _=; != '│'; if r==0 then != '┬'
do c=1 for cols; x= @.r.c
if r==0 then x= copies("─", wid.c + 1)
if j==1 then _= _ || ! || left(x, wid.c) /*justify left*/
if j==2 then _= _ || ! || right(x, wid.c) /* " ruggt*/
if j==3 then _= _ || ! || centrecenter(x, wid.c) /* " ctr.*/
end /*c*/
if r==0 then do; _= '┌'substr(_, 2, length(_) - 1)"┐" /*top line.*/
bot= '└'substr(_, 2, length(_) - 2)"┘" /*bot " */
end
else _= _ || ! /*append trailing end boxing character.*/
say _
end /*r*/ /* [↑] shows words in boxes. */
say translate(bot, '┴', "┬") /*display the bottom line of the box. */
end /*j*/ /*stick a fork in it, we're all done. */</lang>
{{out|output|text=&nbsp; when using the default input:}}