X-Git-Url: http://nitlanguage.org diff --git a/lib/csv.nit b/lib/csv.nit index a34432b..9b4da2f 100644 --- a/lib/csv.nit +++ b/lib/csv.nit @@ -17,12 +17,16 @@ module csv # A CSV document representation class CSVDocument - private var header: Array[String] = new Array[String] - private var lines: Array[Array[String]] = new Array[Array[String]] + super Streamable + + var header: Array[String] writable = new Array[String] + var lines: Array[Array[String]] = new Array[Array[String]] fun set_header(values: Object...) do header.clear - for value in values do header.add(value.to_s) + for value in values do + header.add(value.to_s) + end end fun add_line(values: Object...) do @@ -31,19 +35,33 @@ class CSVDocument abort end var line = new Array[String] - for value in values do line.add(value.to_s) + for value in values do + line.add(value.to_s) + end 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 + private fun write_line_to(line: Collection[String], stream: OStream) + do + var i = line.iterator + if i.is_ok then + stream.write(i.item) + i.next + while i.is_ok do + stream.write(";") + stream.write(i.item) + i.next + end + end + stream.write("\n") end - fun save(file: String) do - var out = new OFStream.open(file) - out.write(self.to_s) - out.close + redef fun write_to(stream) + do + write_line_to(header, stream) + for line in lines do write_line_to(line, stream) end + + # deprecated alias for `write_to_file` + fun save(file: String) do write_to_file(file) end