#define IGet(__N__,__X__) [__N__]SGet(__X__) #include #define MAX_LINE 1000 Begin Option Stack 15 Declare as Numeric ( fd, i, index, max token ) as Numeric ( num tokens, size Column, tCells ) as Alpha ( line ) as Numeric ( display Left, display Right, display Center ) GetParam(script, file to edit, separator) // get statistics of file: #lines, #total chars, line more long, and num tokens from first line. Token Sep( separator ) Stat( file to edit, dats ) // declare arrays to work: Dim ( IGet(1,dats), Add(IGet(4,dats),10) ) for Fill Array("",cells) Clear(dats) MStore ( cells, display Left, display Right, display Center ) // read each line as array, get # of elements, and put into array cells: Open(OPEN_READ, file to edit ) (fd) When( File Error ){ Stop } index=1 While Not Eof(fd) ReadRow(MAX_LINE)(fd) and Copy to (line); get Length, and Move to (num tokens) Set Interval [index, 1:num tokens]; Take( line ) and SPut(cells) When ( var( max token) Is Lt (num tokens) ) { max token = num tokens } ++index Wend Close(fd) // formatting... For Up( i:=1, max token, 1 ) Set Interval [1:end,i], and Let ( size Column := MaxValue( Len(Get(cells)) ) Plus(1) ) Let ( tCells := Get(cells) ) LPad$( " ", size Column, tCells ), and Put(display Left) RPad$( " ", size Column, tCells ), and Put(display Right) CPad$( " ", size Column, tCells ), and Put(display Center) Next // display: Token Sep ("") Print("Left Pad:\n", display Left, Newl, "Right Pad:\n", display Right, Newl, "Center Pad:\n", display Center,Newl) End