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;
uses Classes, SysUtils;
 
var s: string;
    ts: tStringList;
    inFile,
    outFile: Text;
    Sum: integer;
    Number: string;
 
begin
 
  Assign(inFile,'input.csv');
  Reset(inFile);
 
  Assign(outFile,'result.csv');
  Rewrite(outFile);
 
  ts:=tStringList.Create;
  ts.StrictDelimiter:=True;             
 
  // Handle the header
  ReadLn(inFile,s);                     // Read a line from input file
  ts.CommaText:=s;                      // Split it to lines
  ts.Add('SUM');                        // Add a line
  WriteLn(outFile,ts.CommaText);        // Reassemble it with comma as delimiter
 
  // Handle the data
  while not eof(inFile) do
  begin
    ReadLn(inFile,s);
    ts.CommaText:=s;
 
    Sum:=0;
    for Number in ts do
      Sum+=StrToInt(Number);
 
    ts.Add('%D',[Sum]);
 
    writeln(outFile, ts.CommaText);
  end;
  Close(outFile);
  Close(inFile);
  ts.Free;
end.
 