40 lines
1.2 KiB
Text
40 lines
1.2 KiB
Text
PROCEDURE Main()
|
|
LOCAL a := { "Given$a$text$file$of$many$lines,$where$fields$within$a$line$",;
|
|
"are$delineated$by$a$single$'dollar'$character,$write$a$program",;
|
|
"that$aligns$each$column$of$fields$by$ensuring$that$words$in$each$",;
|
|
"column$are$separated$by$at$least$one$space.",;
|
|
"Further,$allow$for$each$word$in$a$column$to$be$either$left$",;
|
|
"justified,$right$justified,$or$center$justified$within$its$column." }
|
|
LOCAL e, nMax
|
|
|
|
// remove trailing dollars
|
|
AEval( a, {|e,n| Iif( Right(e,1)=="$", a[n] := hb_StrShrink( e, 1 ), NIL ) } )
|
|
|
|
// find max word length
|
|
nMax := 0
|
|
AEval( a, {|e| AEval( hb_Atokens( e, "$"), {|i| nMax := Max( nMax, Len(i) )} ) } )
|
|
nMax++
|
|
|
|
// start printing, padding words as needed
|
|
?
|
|
? "----Left aligned columns----"
|
|
FOR EACH e IN a
|
|
?
|
|
AEval( hb_Atokens( e, "$"), {|i| QQout( PadR(i, nMax) )} )
|
|
NEXT
|
|
|
|
?
|
|
? "----Center aligned columns----"
|
|
FOR EACH e IN a
|
|
?
|
|
AEval( hb_Atokens( e, "$"), {|i| QQout( PadC(i, nMax) )} )
|
|
NEXT
|
|
|
|
?
|
|
? "----Right aligned columns----"
|
|
FOR EACH e IN a
|
|
?
|
|
AEval( hb_Atokens( e, "$"), {|i| QQout( PadL(i, nMax) )} )
|
|
NEXT
|
|
|
|
RETURN
|