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.



use System.IO.File;
use Data.CSV;
 
class CsvData {
  function : Main(args : String[]) ~ Nil {
    file_out : FileWriter;
    leaving {
      if(file_out <> Nil) {
        file_out->Close();
      };
    };
 
    if(args->Size() > 0) {
      file_name := args[0];
      csv := CsvTable->New(FileReader->ReadFile(file_name));
      if(csv->IsParsed()) {
        csv->AppendColumn("SUM");
        for(i := 1; i < csv->Size(); i += 1;) {
          row := csv->Get(i);
          sum := row->Sum(row->Size() - 1);
          row->Set("SUM", sum->ToString());
        };
      };
 
      output := csv->ToString();
      output->PrintLine();
 
      file_out := FileWriter->New("new-csv.csv");
      file_out->WriteString(output);
    };
  }
}
 