Project

General

Profile

Bug #15770

Updated by skyksandr (Aleksandr Kunin) about 5 years ago

It works on 2.5.\*, but doesn't work on 2.6.\* 

 ``` 
 require 'csv' 
 require 'date' 

 counter = 0 

 CSV.foreach('./05-31-20.CSV', skip_lines: /^[^0-9]{4}/) do |row| 
   time = row[0] 

   p time if time.length < 23 
   counter += 1 
 end 

 p "Processed: #{counter} lines" 
 ``` 

 And the result is: 

 ``` 
 "03-09T09:40:04.00Z" 
 "Processed: 4424 lines" 
 ``` 

 So there are two problems: 
 1. Line 4424 got corrupted by slicing 5 symbols ("2019-") 
 2. Not whole file is parsed, total number of lines: **4497** 

 EDIT: 
 With regex `/^(?![0-9]{4})/` in addition to corrupt first field parser hangs in infinite loop. 
 Stack (to give you an idea where to look to): 
 ``` 
	 7: from ~/.rbenv/versions/2.6.2/lib/ruby/2.6.0/csv.rb:509:in `foreach' 
	 6: from ~/.rbenv/versions/2.6.2/lib/ruby/2.6.0/csv.rb:657:in `open' 
	 5: from ~/.rbenv/versions/2.6.2/lib/ruby/2.6.0/csv.rb:510:in `block in foreach' 
	 4: from ~/.rbenv/versions/2.6.2/lib/ruby/2.6.0/csv.rb:1176:in `each' 
	 3: from ~/.rbenv/versions/2.6.2/lib/ruby/2.6.0/csv/parser.rb:265:in `parse' 
	 2: from ~/.rbenv/versions/2.6.2/lib/ruby/2.6.0/csv/parser.rb:583:in `skip_needless_lines' 
	 1: from ~/.rbenv/versions/2.6.2/lib/ruby/2.6.0/csv/parser.rb:704:in `parse_row_end' 
 ``` 

 EDIT2: the issue is reproducible on `3.0.4`, but resolved on `csv 3.0.9`

Back