74 lines
1018 B
Plaintext
74 lines
1018 B
Plaintext
void
|
|
read_csv(list t, text path)
|
|
{
|
|
file f;
|
|
list l;
|
|
|
|
f_affix(f, path);
|
|
while (f_news(f, l, 0, 0, ",") ^ -1) {
|
|
l_append(t, l);
|
|
}
|
|
}
|
|
|
|
list
|
|
sum_columns(list t)
|
|
{
|
|
list c, l;
|
|
integer i;
|
|
|
|
l_append(c, "SUM");
|
|
for (i, l in t) {
|
|
if (i) {
|
|
integer j, sum;
|
|
text s;
|
|
|
|
sum = 0;
|
|
for (j, s in l) {
|
|
sum += atoi(s);
|
|
}
|
|
|
|
l_append(c, sum);
|
|
}
|
|
}
|
|
|
|
return c;
|
|
}
|
|
|
|
void
|
|
add_column(list t, list c)
|
|
{
|
|
integer i;
|
|
list l;
|
|
|
|
for (i, l in t) {
|
|
l_append(l, c[i]);
|
|
}
|
|
}
|
|
|
|
void
|
|
write_csv(list t, text path)
|
|
{
|
|
integer i;
|
|
file f;
|
|
list l;
|
|
|
|
f_create(f, path, 00644);
|
|
for (i, l in t) {
|
|
f_(f, l[0]);
|
|
l_ocall(l, f_, 2, 1, -1, f, ",");
|
|
f_newline(f);
|
|
}
|
|
}
|
|
|
|
integer
|
|
main(void)
|
|
{
|
|
list t;
|
|
|
|
read_csv(t, "tmp/CSV_data_manipulation.csv");
|
|
add_column(t, sum_columns(t));
|
|
write_csv(t, "tmp/CSV_data_manipulated.csv");
|
|
|
|
return 0;
|
|
}
|