61 lines
2.1 KiB
Plaintext
61 lines
2.1 KiB
Plaintext
FUNCTION alignColumns RETURNS CHAR (
|
|
i_c AS CHAR,
|
|
i_calign AS CHAR
|
|
):
|
|
|
|
DEF VAR ipass AS INT.
|
|
DEF VAR iline AS INT.
|
|
DEF VAR icol AS INT.
|
|
DEF VAR iwidth AS INT EXTENT.
|
|
DEF VAR cword AS CHAR.
|
|
DEF VAR cspace AS CHAR.
|
|
DEF VAR cresult AS CHAR.
|
|
|
|
EXTENT( iwidth ) = NUM-ENTRIES( ENTRY( 1, i_c, "~n" ), "$" ).
|
|
|
|
DO ipass = 0 TO 1:
|
|
DO iline = 1 TO NUM-ENTRIES( i_c, "~n" ):
|
|
DO icol = 1 TO NUM-ENTRIES( ENTRY( iline, i_c, "~n" ), "$" ):
|
|
cword = ENTRY( icol, ENTRY( iline, i_c, "~n" ), "$" ).
|
|
IF ipass = 0 THEN
|
|
iwidth = MAXIMUM( LENGTH( cword ), iwidth[ icol ] ).
|
|
ELSE DO:
|
|
cspace = FILL( " ", iwidth[ icol ] - LENGTH( cword ) ).
|
|
CASE i_calign:
|
|
WHEN "left" THEN cresult = cresult + cword + cspace.
|
|
WHEN "right" THEN cresult = cresult + cspace + cword.
|
|
WHEN "center" THEN DO:
|
|
cword = FILL( " ", INTEGER( LENGTH( cspace ) / 2 ) ) + cword.
|
|
cresult = cresult + cword + FILL( " ", iwidth[icol] - LENGTH( cword ) ).
|
|
END.
|
|
END CASE. /* i_calign */
|
|
cresult = cresult + " ".
|
|
END.
|
|
END. /* DO icol = 1 TO ... */
|
|
IF ipass = 1 THEN
|
|
cresult = cresult + "~n".
|
|
END. /* DO iline = 1 TO ... */
|
|
END. /* DO ipass = 0 TO 1 */
|
|
|
|
RETURN cresult.
|
|
|
|
END FUNCTION.
|
|
|
|
DEF VAR cc AS CHAR.
|
|
|
|
cc = SUBSTITUTE(
|
|
"&1~n&2~n&3~n&4~n&5~n&6",
|
|
"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."
|
|
).
|
|
|
|
MESSAGE
|
|
alignColumns( cc, "left" ) SKIP
|
|
alignColumns( cc, "right" ) SKIP
|
|
alignColumns( cc, "center" )
|
|
VIEW-AS ALERT-BOX.
|