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