mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
[ruby/csv] parser: use row separator explicitly
It will improve performance a bit. (But I haven't confirmed it yet...)
06a65b0302
This commit is contained in:
parent
4a5d372ca8
commit
002ce9f515
Notes:
git
2021-12-24 14:35:53 +09:00
1 changed files with 5 additions and 3 deletions
|
@ -85,9 +85,10 @@ class CSV
|
||||||
# If there is no more data (eos? = true), it returns "".
|
# If there is no more data (eos? = true), it returns "".
|
||||||
#
|
#
|
||||||
class InputsScanner
|
class InputsScanner
|
||||||
def initialize(inputs, encoding, chunk_size: 8192)
|
def initialize(inputs, encoding, row_separator, chunk_size: 8192)
|
||||||
@inputs = inputs.dup
|
@inputs = inputs.dup
|
||||||
@encoding = encoding
|
@encoding = encoding
|
||||||
|
@row_separator = row_separator
|
||||||
@chunk_size = chunk_size
|
@chunk_size = chunk_size
|
||||||
@last_scanner = @inputs.empty?
|
@last_scanner = @inputs.empty?
|
||||||
@keeps = []
|
@keeps = []
|
||||||
|
@ -250,7 +251,7 @@ class CSV
|
||||||
@last_scanner = @inputs.empty?
|
@last_scanner = @inputs.empty?
|
||||||
true
|
true
|
||||||
else
|
else
|
||||||
chunk = input.gets(nil, @chunk_size)
|
chunk = input.gets(@row_separator, @chunk_size)
|
||||||
if chunk
|
if chunk
|
||||||
raise InvalidEncoding unless chunk.valid_encoding?
|
raise InvalidEncoding unless chunk.valid_encoding?
|
||||||
@scanner = StringScanner.new(chunk)
|
@scanner = StringScanner.new(chunk)
|
||||||
|
@ -778,6 +779,7 @@ class CSV
|
||||||
Integer((ENV["CSV_PARSER_SCANNER_TEST_CHUNK_SIZE"] || "1"), 10)
|
Integer((ENV["CSV_PARSER_SCANNER_TEST_CHUNK_SIZE"] || "1"), 10)
|
||||||
InputsScanner.new(inputs,
|
InputsScanner.new(inputs,
|
||||||
@encoding,
|
@encoding,
|
||||||
|
@row_separator,
|
||||||
chunk_size: chunk_size)
|
chunk_size: chunk_size)
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
|
@ -807,7 +809,7 @@ class CSV
|
||||||
StringIO.new(sample)
|
StringIO.new(sample)
|
||||||
end
|
end
|
||||||
inputs << @input
|
inputs << @input
|
||||||
InputsScanner.new(inputs, @encoding)
|
InputsScanner.new(inputs, @encoding, @row_separator)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue