+# Helper class to output metrics as CVS formatted files
+class CSVDocument
+ private var file: String
+ private var header: Array[String] = new Array[String]
+ private var lines: Array[Array[String]] = new Array[Array[String]]
+
+ init(file: String) do self.file = file
+
+ fun set_header(values: Object...) do
+ header.clear
+ for value in values do header.add(value.to_s)
+ end
+
+ fun add_line(values: Object...) do
+ if values.length != header.length then
+ print "CSV error: header declares {header.length} columns, line contains {values.length} values"
+ abort
+ end
+ var line = new Array[String]
+ for value in values do line.add(value.to_s)
+ lines.add(line)
+ end
+
+ redef fun to_s do
+ var str = header.join(";") + "\n"
+ for line in lines do str += line.join(";") + "\n"
+ return str
+ end
+
+ fun save do
+ var out = new OFStream.open(self.file)
+ out.write(self.to_s)
+ out.close
+ end
+end
+