diff --git a/doc/csv/options/common/col_sep.rdoc b/doc/csv/options/common/col_sep.rdoc index bb4d3ce389b8ab..05769b577330b9 100644 --- a/doc/csv/options/common/col_sep.rdoc +++ b/doc/csv/options/common/col_sep.rdoc @@ -7,39 +7,57 @@ The \String will be transcoded into the data's \Encoding before use. Default value: CSV::DEFAULT_OPTIONS.fetch(:col_sep) # => "," (comma) -For examples in this section: - ary = ['a', 'b', 'c'] - -Using the default: - str = CSV.generate_line(line) - str # => "a,b,c\n" - ary = CSV.parse_line(str) - ary # => ["a", "b", "c"] +Using the default (comma): + str = CSV.generate do |csv| + csv << [:foo, 0] + csv << [:bar, 1] + csv << [:baz, 2] + end + str # => "foo,0\nbar,1\nbaz,2\n" + ary = CSV.parse(str) + ary # => [["foo", "0"], ["bar", "1"], ["baz", "2"]] Using +:+ (colon): col_sep = ':' - str = CSV.generate_line(ary, col_sep: col_sep) - str # => "a:b:c\n" - ary = CSV.parse_line(str, col_sep: col_sep) - ary # => [["a", "b", "c"]] + str = CSV.generate(col_sep: col_sep) do |csv| + csv << [:foo, 0] + csv << [:bar, 1] + csv << [:baz, 2] + end + str # => "foo:0\nbar:1\nbaz:2\n" + ary = CSV.parse(str, col_sep: col_sep) + ary # => [["foo", "0"], ["bar", "1"], ["baz", "2"]] Using +::+ (two colons): col_sep = '::' - str = CSV.generate_line(ary, col_sep: col_sep) - str # => "a::b::c\n" - ary = CSV.parse_line(str, col_sep: col_sep) - ary # => [["a", "b", "c"]] + str = CSV.generate(col_sep: col_sep) do |csv| + csv << [:foo, 0] + csv << [:bar, 1] + csv << [:baz, 2] + end + str # => "foo::0\nbar::1\nbaz::2\n" + ary = CSV.parse(str, col_sep: col_sep) + ary # => [["foo", "0"], ["bar", "1"], ["baz", "2"]] + +Using '' (empty string): + col_sep = '' + str = CSV.generate(col_sep: col_sep) do |csv| + csv << [:foo, 0] + csv << [:bar, 1] + csv << [:baz, 2] + end + str # => "foo0\nbar1\nbaz2\n" --- -Raises an exception if given the empty \String: +Raises an exception if parsing with the empty \String: col_sep = '' # Raises ArgumentError (:col_sep must be 1 or more characters: "") - CSV.parse_line("a:b:c\n", col_sep: col_sep) + CSV.parse("foo0\nbar1\nbaz2\n", col_sep: col_sep) Raises an exception if the given value is not String-convertible: col_sep = BasicObject.new # Raises NoMethodError (undefined method `to_s' for #) - CSV.generate_line(line, col_sep: col_sep) + CSV.generate(line, col_sep: col_sep) # Raises NoMethodError (undefined method `to_s' for #) CSV.parse(str, col_sep: col_sep) diff --git a/doc/csv/options/common/quote_char.rdoc b/doc/csv/options/common/quote_char.rdoc index eb2ad9c0c802d5..67fd3af68bb0b4 100644 --- a/doc/csv/options/common/quote_char.rdoc +++ b/doc/csv/options/common/quote_char.rdoc @@ -5,28 +5,38 @@ in both parsing and generating. This String will be transcoded into the data's \Encoding before use. Default value: - CSV::DEFAULT_OPTIONS.fetch(:quote_char) # => "\"" (backslash) + CSV::DEFAULT_OPTIONS.fetch(:quote_char) # => "\"" (double quote) This is useful for an application that incorrectly uses ' (single-quote) to quote fields, instead of the correct " (double-quote). -Using the default: - ary = ['a', 'b', '"c"', 'd'] - str = CSV.generate_line(ary) - str # => "a,b,\"\"\"c\"\"\",d\n" - ary = CSV.parse_line(str) - ary # => ["a", "b", "\"c\"", "d"] +Using the default (double quote): + str = CSV.generate do |csv| + csv << ['foo', 0] + csv << ["'bar'", 1] + csv << ['"baz"', 2] + end + str # => "foo,0\n'bar',1\n\"\"\"baz\"\"\",2\n" + ary = CSV.parse(str) + ary # => [["foo", "0"], ["'bar'", "1"], ["\"baz\"", "2"]] Using ' (single-quote): quote_char = "'" - ary = ['a', 'b', '\'c\'', 'd'] - str = CSV.generate_line(ary, quote_char: quote_char) - str # => "a,b,'''c''',d\n" - ary = CSV.parse_line(str, quote_char: quote_char) - ary # => [["a", "b", "'c'", "d"]] + str = CSV.generate(quote_char: quote_char) do |csv| + csv << ['foo', 0] + csv << ["'bar'", 1] + csv << ['"baz"', 2] + end + str # => "foo,0\n'''bar''',1\n\"baz\",2\n" + ary = CSV.parse(str, quote_char: quote_char) + ary # => [["foo", "0"], ["'bar'", "1"], ["\"baz\"", "2"]] --- Raises an exception if the \String length is greater than 1: # Raises ArgumentError (:quote_char has to be nil or a single character String) CSV.new('', quote_char: 'xx') + +Raises an exception if the value is not a \String: + # Raises ArgumentError (:quote_char has to be nil or a single character String) + CSV.new('', quote_char: :foo) diff --git a/doc/csv/options/common/row_sep.rdoc b/doc/csv/options/common/row_sep.rdoc index a9e2c5b2fb5ae8..872d9d1f3f1066 100644 --- a/doc/csv/options/common/row_sep.rdoc +++ b/doc/csv/options/common/row_sep.rdoc @@ -12,7 +12,8 @@ When +row_sep+ is a \String, that \String becomes the row separator. The String will be transcoded into the data's Encoding before use. Using "\n": - str = CSV.generate do |csv| + row_sep = "\n" + str = CSV.generate(row_sep: row_sep) do |csv| csv << [:foo, 0] csv << [:bar, 1] csv << [:baz, 2] @@ -57,20 +58,28 @@ Using '' (empty string): --- When +row_sep+ is the \Symbol +:auto+ (the default), -invokes auto-discovery of the row separator. +generating uses "\n" as the row separator: + str = CSV.generate do |csv| + csv << [:foo, 0] + csv << [:bar, 1] + csv << [:baz, 2] + end + str # => "foo,0\nbar,1\nbaz,2\n" + +Parsing, on the other hand, invokes auto-discovery of the row separator. Auto-discovery reads ahead in the data looking for the next \r\n, +\n+, or +\r+ sequence. The sequence will be selected even if it occurs in a quoted field, assuming that you would have the same line endings there. - row_sep = :auto - str = CSV.generate(row_sep: row_sep) do |csv| +Example: + str = CSV.generate do |csv| csv << [:foo, 0] csv << [:bar, 1] csv << [:baz, 2] end str # => "foo,0\nbar,1\nbaz,2\n" - ary = CSV.parse(str, row_sep: row_sep) + ary = CSV.parse(str) ary # => [["foo", "0"], ["bar", "1"], ["baz", "2"]] The default $INPUT_RECORD_SEPARATOR ($/) is used @@ -86,6 +95,6 @@ Obviously, discovery takes a little time. Set manually if speed is important. Al Raises an exception if the given value is not String-convertible: row_sep = BasicObject.new # Raises NoMethodError (undefined method `to_s' for #) - CSV.generate_line(ary, row_sep: row_sep) + CSV.generate(ary, row_sep: row_sep) # Raises NoMethodError (undefined method `to_s' for #) CSV.parse(str, row_sep: row_sep)