By default, uses the format recommended by RFC 4180 (see rfc4180).
Note: If a record contains only an empty cell, its representation is undistinguishable from an empty line. This is because the empty values are always written unescaped in order to avoid them to be interpreted as escaped delimiters by some parsers.
var out = new StringWriter
var writer = new CsvWriter(out)
writer.write_elements(1, 2.0, "foo\nbar")
writer.write_line([""])
assert out.to_s == """1,2.0,"foo\nbar"\n\n"""csv :: CsvWriter :: defaultinit
csv :: CsvWriter :: write_elements
Append the elements inels as a record.
			csv :: CsvWriter :: write_lines
Write several lines to a streamcore :: Object :: class_factory
Implementation used byget_class to create the specific class.
			csv :: CsvWriter :: defaultinit
core :: Object :: defaultinit
csv :: CsvStream :: defaultinit
csv :: CsvStream :: delimiter=
The character that delimits escaped value.core :: Object :: is_same_instance
Return true ifself and other are the same instance (i.e. same identity).
			core :: Object :: is_same_serialized
Isself the same as other in a serialization context?
			core :: Object :: is_same_type
Return true ifself and other have the same dynamic type.
			core :: Object :: output_class_name
Display class name on stdout (debug only).csv :: CsvStream :: separator=
The character that split each cell in a record.csv :: CsvWriter :: write_elements
Append the elements inels as a record.
			csv :: CsvWriter :: write_lines
Write several lines to a stream
# Appends CSV records to a file.
#
# By default, uses the format recommended by RFC 4180 (see `rfc4180`).
#
# Note: If a record contains only an empty cell, its representation is
# undistinguishable from an empty line. This is because the empty values are
# always written unescaped in order to avoid them to be interpreted as escaped
# delimiters by some parsers.
#
# ~~~nit
# var out = new StringWriter
# var writer = new CsvWriter(out)
# writer.write_elements(1, 2.0, "foo\nbar")
# writer.write_line([""])
# assert out.to_s == """1,2.0,"foo\nbar"\n\n"""
# ~~~
class CsvWriter
	super CsvStream
	# The output stream.
	var ostream: Writer
	# Write several lines to a stream
	fun write_lines(lines: Array[Array[Object]]) do for i in lines do write_line i
	# Append the elements in `els` as a record.
	#
	# The representation of each cell is determined by `to_s`.
	fun write_elements(els: Object...) do
		var os = ostream
		var esc = delimiter
		var sep = separator
		var eol = eol
		for i in [0 .. els.length - 1[ do
			os.write(els[i].to_s.escape_to_csv(sep, esc, eol))
			os.write_char(sep)
		end
		os.write(els.last.to_s.escape_to_csv(sep, esc, eol))
		os.write(eol)
	end
	# Append the specified record.
	#
	# The representation of each cell is determined by `to_s`.
	fun write_line(line: Array[Object]) do
		var os = ostream
		var esc = delimiter
		var sep = separator
		var eol = eol
		for i in [0 .. line.length - 1[ do
			os.write(line[i].to_s.escape_to_csv(sep, esc, eol))
			os.write_char(sep)
		end
		os.write(line.last.to_s.escape_to_csv(sep, esc, eol))
		os.write(eol)
	end
end
					lib/csv/csv.nit:167,1--223,3