From c2cc9841cecf833b5c4132c6d1ad764cf426b7a2 Mon Sep 17 00:00:00 2001 From: Sutou Kouhei Date: Fri, 22 Mar 2024 23:12:49 +0900 Subject: [PATCH] parser: simplify :skip_lines implementation We can use #each_line here because :skip_lines is a line based process. --- lib/csv/parser.rb | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) diff --git a/lib/csv/parser.rb b/lib/csv/parser.rb index d7fcd10e..f62c398a 100644 --- a/lib/csv/parser.rb +++ b/lib/csv/parser.rb @@ -901,18 +901,15 @@ def build_scanner def skip_needless_lines return unless @skip_lines - until @scanner.eos? - @scanner.keep_start - line = @scanner.scan_all(@not_line_end) || "".encode(@encoding) + @scanner.keep_start + @scanner.each_line(@row_separator) do |line| line << @row_separator if parse_row_end - if skip_line?(line) - @lineno += 1 - @scanner.keep_drop - else - @scanner.keep_back - return - end + break unless skip_line?(line) + @lineno += 1 + @scanner.keep_drop + @scanner.keep_start end + @scanner.keep_back end def skip_line?(line)