RosettaCodeData/Task/CSV-data-manipulation/Ursa/csv-data-manipulation.ursa

43 lines
993 B
Plaintext

#
# csv data manipulation
#
# declare a string stream to hold lines
decl string<> lines
# open the file specified on the command line, halting
# execution if they didn't enter one. it will be created if
# it doesn't exist yet
decl file f
if (< (size args) 2)
out "error: please specify a csv file" endl console
stop
end if
f.create args<1>
f.open args<1>
# read in all lines from the file
set lines (f.readlines)
# append sum column to header
set lines<0> (+ lines<0> ",SUM")
# determine sums and append them
decl int i sum
for (set i 1) (< i (size lines)) (inc i)
set sum 0
for (decl int j) (< j (size (split lines<i> ","))) (inc j)
set sum (int (+ sum (int (split lines<i> ",")<j>)))
end for
set lines<i> (+ lines<i> (+ "," sum))
end for
# delete the file, then create it again
f.delete args<1>
f.create args<1>
# output all lines to the file
for (set i 0) (< i (size lines)) (inc i)
out lines<i> endl f
end for