Anonymous user
Text processing/1: Difference between revisions
m
→{{header|REXX}}
Line 1,630:
=={{header|REXX}}==
<lang rexx>
/*REXX program to process
numeric digits 20 /*allow for bigger numbers. */
Line 1,637:
grandSum=0 /*grand sum of whole file. */
grandflg=0 /*grand num of flagged data. */
grandOKs=0
longFlag=0 /*longest period of flagged data.*/
contFlag=0 /*longest continous flagged data.*/
w=16 /*width of fields when displayed.*/
do
rec=linein(ifid) /*read the next record (line). */
parse var rec datestamp
sum=0
flg=0
do
parse var
if flag.j>0 then do /*if good
sum=sum+data.j
if contFlag>longFlag then do
longdate=datestamp
Line 1,665 ⟶ 1,667:
end
else avg='[n/a]'
grandOKs=grandOKs+OKs
▲ if good\==0 then avg=format(sum/good,,3)
else call sy datestamp 'average='right(avg,15) ' flagged='right(flg,2)▼
grandSum=grandSum+sum
grandFlg=grandFlg+flg
if flg==0 then call sy datestamp ' average='_
end
recs=recs-1 /*adjust for reading end-of-file.*/
else Gavg='[n/a]'
▲if goods\==0 then Gavg=format(grandsum/goods,,3)
call sy
call sy copies('
call sy '
call sy ' grand
call sy ' grand
call sy ' grand OK data:' right(comma(grandOKs),w)
call sy 'longest glagged='longFlag "ending at" longdate▼
call sy ' grand flagged:' right(comma(grandFlg),w)
if longFlag\==0 then
call sy copies('=',60)
call sy
exit
/*─────────────────────────────────────SY subroutine────────────────────*/
sy: procedure; parse arg stuff
say stuff
if 1==0 then call lineout ofid,stuff
return
/*─────────────────────────────────────COMMA subroutine─────────────────*/
comma: procedure; parse arg _,c,p,t;arg ,cu;c=word(c ",",1);
if cu=='BLANK' then c=' ';o=word(p 3,1);p=abs(o);t=word(t 999999999,1);
if \datatype(p,'W')|\datatype(t,'W')|p==0|arg()>4 then return _;
n=_'.9';#=123456789;k=0;
if o<0 then do;b=verify(_,' ');if b==0 then return _;
e=length(_)-verify(reverse(_),' ')+1;end;else do;b=verify(n,#,"M");
e=verify(n,#'0',,verify(n,#"0.",'M'))-p-1;end;
do j=e to b by -p while k<t;_=insert(c,_,j);k=k+1;end;return _
</lang>
Output:
<pre style="height:
∙
∙
∙
∙
2004-12-31 average= 2.057 flagged= 1▼
∙
∙
records read=5471▼
============================================================
grand sum=1358393.400▼
grand flagged=1901▼
longest glagged=589 ending at 1993-03-05▼
grand OK data: 129,403
============================================================
</pre>
|