66 lines
1.3 KiB
Plaintext
66 lines
1.3 KiB
Plaintext
*process source xref attributes or(!);
|
|
csv: Proc Options(Main);
|
|
/*********************************************************************
|
|
* 19.10.2013 Walter Pachl
|
|
* 'erase d:\csv.out'
|
|
* 'set dd:in=d:\csv.in,recsize(300)'
|
|
* 'set dd:out=d:\csv.out,recsize(300)'
|
|
* Say 'Input:'
|
|
* 'type csv.in'
|
|
* 'csv'
|
|
* Say ' '
|
|
* Say 'Output:'
|
|
* 'type csv.out'
|
|
*********************************************************************/
|
|
Dcl in Record Input;
|
|
Dcl out Record Output;
|
|
On Endfile(in) Goto part2;
|
|
Dcl (INDEX,LEFT,SUBSTR,TRIM) Builtin;
|
|
|
|
Dcl (i,j,p,m,n) Bin Fixed(31) Init(0);
|
|
Dcl s Char(100) Var;
|
|
Dcl iline(10) Char(100) Var;
|
|
Dcl a(20,20) Char(10) Var;
|
|
Dcl sum Dec Fixed(3);
|
|
Dcl oline Char(100) Var;
|
|
|
|
Do i=1 By 1;
|
|
Read File(in) Into(s);
|
|
iline(i)=s;
|
|
m=i;
|
|
Call sep((s));
|
|
End;
|
|
|
|
part2:
|
|
Do i=1 To m;
|
|
If i=1 Then
|
|
oline=iline(1)!!','!!'SUM';
|
|
Else Do;
|
|
sum=0;
|
|
Do j=1 To n;
|
|
sum=sum+a(i,j);
|
|
End;
|
|
oline=iline(i)!!','!!trim(sum);
|
|
End;
|
|
Write File(out) From(oline);
|
|
End;
|
|
|
|
sep: Procedure(line);
|
|
Dcl line Char(*) Var;
|
|
loop:
|
|
Do j=1 By 1;
|
|
p=index(line,',');
|
|
If p>0 Then Do;
|
|
a(i,j)=left(line,p-1);
|
|
line=substr(line,p+1);
|
|
End;
|
|
Else Do;
|
|
a(i,j)=line;
|
|
Leave loop;
|
|
End;
|
|
End;
|
|
n=j;
|
|
End;
|
|
|
|
End;
|