CSV spreadsheet files are suitable for storing tabular data in a relatively portable way.

The CSV format is flexible but somewhat ill-defined.

For present purposes, authors may assume that the data fields contain no commas, backslashes, or quotation marks.



Task

Read a CSV file, change some values and save the changes back to a file.

For this task we will use the following CSV file:

C1,C2,C3,C4,C5
1,5,9,13,17
2,6,10,14,18
3,7,11,15,19
4,8,12,16,20

Suggestions


 Show how to add a column, headed 'SUM', of the sums of the rows.
 If possible, illustrate the use of built-in or standard functions, methods, or libraries, that handle generic CSV files.



with javascript_semantics
constant tcsv = """
C1,C2,C3,C4,C5
1,5,9,13,17
2,6,10,14,18
3,7,11,15,19
4,8,12,16,20
"""
sequence lines = iff(platform()=JS?split(tcsv,"\n"):get_text("test.csv",GT_LF_STRIPPED))
for i=1 to length(lines) do
    lines[i] = split(trim(lines[i]),',')
end for
lines[1] = join(lines[1],',')&",SUM"
for i=2 to length(lines) do
    sequence s = deep_copy(lines[i]), t = {}
    for j=1 to length(s) do
        t &= scanf(s[j],"%d")[1][1]
    end for
--  s[rand(length(s))] = rand(100) -- (if you like)
    t &= sum(t)
    lines[i] = sprintf("%d,%d,%d,%d,%d,%d",t)
end for
lines = join(lines,'\n')
if platform()!=JS then
    integer fn = open("out.csv","w")
    puts(fn,lines)
    close(fn)
end if
puts(1,lines)
