Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
52
Task/Align-columns/M2000-Interpreter/align-columns.m2000
Normal file
52
Task/Align-columns/M2000-Interpreter/align-columns.m2000
Normal file
|
|
@ -0,0 +1,52 @@
|
|||
Module Align_Columns {
|
||||
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.
|
||||
}
|
||||
const cr$=chr$(13), lf$=chr$(10)
|
||||
def c1=0, cmax=0, p1=-1, i
|
||||
flush ' empty stack
|
||||
for i=1 to len(a$)
|
||||
select case mid$(a$,i,1)
|
||||
case "$", cr$
|
||||
if p1<>-1 then data (p1, c1): p1=-1: cmax=max(c1,cmax):c1=0
|
||||
case lf$
|
||||
data (-1,0) ' push to end of stack an array of two items (a tuple in m2000)
|
||||
else case
|
||||
if p1=-1 then p1=i :c1=1 else c1++
|
||||
end select
|
||||
next
|
||||
if p1<>-1 then push (p1, c1): cmax=max(c1,cmax):c1=0
|
||||
\\ so now stack of values hold all tuples.
|
||||
Dim Words(), AlignType$(1 to 3)
|
||||
AlignType$(1)=lambda$ (a$,wd)->field$(a$, wd)
|
||||
AlignType$(2)=lambda$ (a$,wd)->{
|
||||
a$=left$(a$, wd)
|
||||
=left$(string$(" ", (len(a$)-wd) div 2)+a$+string$(" ",wd),wd)
|
||||
}
|
||||
AlignType$(3)= lambda$ (a$,wd)->format$("{0:"+str$(-wd)+"}", a$)
|
||||
\\ [] return a stack object, reference and leave current stack of values a new stack
|
||||
\\ Array( stack_object) empty the stack object moving items to an array
|
||||
Words()=Array([])
|
||||
document export$
|
||||
def aline$
|
||||
cmax++ ' add one space
|
||||
For al=1 to 3
|
||||
For i=0 to len(Words())-1
|
||||
if Words(i)(0)=-1 then
|
||||
' we use rtrim$() to cut trailing spaces
|
||||
export$=rtrim$(aline$)+cr$+lf$ : aline$=""
|
||||
else
|
||||
aline$+=AlignType$(al)(mid$(a$,Words(i)(0), Words(i)(1)),cmax)
|
||||
end if
|
||||
next i
|
||||
next
|
||||
\\ export to clipboard
|
||||
Clipboard export$
|
||||
Rem Form 140, 60
|
||||
Rem Print #-2, export$ ' render text to console without using console's columns
|
||||
}
|
||||
Align_Columns
|
||||
Loading…
Add table
Add a link
Reference in a new issue