diff options
author | jeg2 <jeg2@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2012-08-20 20:52:36 +0000 |
---|---|---|
committer | jeg2 <jeg2@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2012-08-20 20:52:36 +0000 |
commit | 3c3e659196b7511f02b03e2904c40a29993a184c (patch) | |
tree | 7ed24f6ae43d6ecac69602d97e15039768f75059 /lib | |
parent | 6ac1d39acec4ccb01cca219e30d2ba4b3547a9e3 (diff) | |
download | ruby-3c3e659196b7511f02b03e2904c40a29993a184c.tar.gz |
* lib/csv.rb: Fixes #161 on github
* lib/csv.rb: You can now specify a pattern for :skip_lines.
Matching lines will not be passed to the CSV parser.
* lib/csv.rb: Patch by Christian Schwartz.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@36743 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'lib')
-rw-r--r-- | lib/csv.rb | 25 |
1 files changed, 24 insertions, 1 deletions
diff --git a/lib/csv.rb b/lib/csv.rb index 13f86ec318..45da2c9bd6 100644 --- a/lib/csv.rb +++ b/lib/csv.rb @@ -973,6 +973,7 @@ class CSV # <b><tt>:header_converters</tt></b>:: +nil+ # <b><tt>:skip_blanks</tt></b>:: +false+ # <b><tt>:force_quotes</tt></b>:: +false+ + # <b><tt>:skip_lines</tt></b>:: +nil+ # DEFAULT_OPTIONS = { col_sep: ",", row_sep: :auto, @@ -984,7 +985,8 @@ class CSV return_headers: false, header_converters: nil, skip_blanks: false, - force_quotes: false }.freeze + force_quotes: false, + skip_lines: nil }.freeze # # This method will return a CSV instance, just like CSV::new(), but the @@ -1554,6 +1556,14 @@ class CSV # skip over any rows with no content. # <b><tt>:force_quotes</tt></b>:: When set to a +true+ value, CSV will # quote all CSV fields it creates. + # <b><tt>:skip_lines</tt></b>:: When set to an object responding to + # <tt>match</tt>, every line matching + # it is considered a comment and ignored + # during parsing. When set to +nil+ + # no line is considered a comment. + # If the passed object does not respond + # to <tt>match</tt>, <tt>ArgumentError</tt> + # is thrown. # # See CSV::DEFAULT_OPTIONS for the default settings. # @@ -1591,6 +1601,7 @@ class CSV init_parsers(options) init_converters(options) init_headers(options) + init_comments(options) options.delete(:encoding) options.delete(:internal_encoding) @@ -1620,6 +1631,10 @@ class CSV attr_reader :quote_char # The limit for field size, if any. See CSV::new for details. attr_reader :field_size_limit + + # The regex marking a line as a comment. See CSV::new for details + attr_reader :skip_lines + # # Returns the current list of converters in effect. See CSV::new for details. # Built-in converters will be returned by name, while others will be returned @@ -1873,6 +1888,8 @@ class CSV end end + next if @skip_lines and @skip_lines.match parse + parts = parse.split(@col_sep, -1) if parts.empty? if in_extended_col @@ -2189,6 +2206,12 @@ class CSV init_converters(options, :header_converters) end + def init_comments(options) + @skip_lines = options.delete(:skip_lines) + if @skip_lines and not @skip_lines.respond_to?(:match) + raise ArgumentError, ":skip_lines has to respond to matches" + end + end # # The actual work method for adding converters, used by both CSV.convert() and # CSV.header_convert(). |