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.



 
program CSV_data_manipulation;
 
{$APPTYPE CONSOLE}
 
uses
  System.SysUtils,
  System.IoUtils,
  System.Types;
 
type
  TStringDynArrayHelper = record helper for TStringDynArray
    function Sum: Integer;
  end;
 
{ TStringDynArrayHelper }
 
function TStringDynArrayHelper.Sum: Integer;
var
  value: string;
begin
  Result := 0;
  for value in self do
    Result := Result + StrToIntDef(value, 0);
end;
 
const
  FILENAME = './Data.csv';
 
var
  i: integer;
  Input, Row: TStringDynArray;
 
begin
  Input := TFile.ReadAllLines(FILENAME);
  for i := 0 to High(Input) do
  begin
    if i = 0 then
      Input[i] := Input[i] + ',SUM'
    else
    begin
      Row := Input[i].Split([',']);
      Input[i] := Input[i] + ',' + row.Sum.ToString;
    end;
  end;
  TFile.WriteAllLines(FILENAME, Input);
end.