diff --git a/spec/std/csv/csv_parse_spec.cr b/spec/std/csv/csv_parse_spec.cr index 3e505cd349ea..3118488ef4c5 100644 --- a/spec/std/csv/csv_parse_spec.cr +++ b/spec/std/csv/csv_parse_spec.cr @@ -72,15 +72,12 @@ describe CSV do end it "parses to hashes remaining rows" do - csv_text = "Index,Customer Id,First Name,Last Name\n1,DD37Cf93aecA6Dc,Sheryl,Baxter\n2,1Ef7b82A4CAAD10,Preston,Lozano\n3,6F94879bDAfE5a6,,Berry" + csv_text = "Index,Customer Id,First Name,Last Name\n1,DD37Cf93aecA6Dc,Sheryl,Baxter\n2,1Ef7b82A4CAAD10,Preston,Lozano" parser = CSV::Parser.new(csv_text) - # skip header - parser.next_row - # skip rows - parser.next_row + parser.next_row - parser.parse_to_h.should eq([{"Index" => "3", "Customer Id" => "6F94879bDAfE5a6", "First Name" => "", "Last Name" => "Berry"}]) + parser.parse_to_h.should eq([{"1" => "2", "DD37Cf93aecA6Dc" => "1Ef7b82A4CAAD10", "Sheryl" => "Preston", "Baxter" => "Lozano"}]) end it "raises if single quote in the middle" do diff --git a/src/csv/lexer.cr b/src/csv/lexer.cr index 5109f630a7e0..9d3d04c68c0f 100644 --- a/src/csv/lexer.cr +++ b/src/csv/lexer.cr @@ -29,9 +29,6 @@ abstract class CSV::Lexer getter separator : Char getter quote_char : Char - # :nodoc: - protected getter line_number : Int32 - # :nodoc: def initialize(@separator : Char = DEFAULT_SEPARATOR, @quote_char : Char = DEFAULT_QUOTE_CHAR) @token = Token.new diff --git a/src/csv/parser.cr b/src/csv/parser.cr index a3460b302fe7..60296db75839 100644 --- a/src/csv/parser.cr +++ b/src/csv/parser.cr @@ -21,14 +21,8 @@ class CSV::Parser def parse_to_h : Array(Hash(String, String)) rows = [] of Hash(String, String) - row_number = @lexer.line_number - - rewind if headers = next_row - while @lexer.line_number < row_number - next_row - end - each_row do |row| + while row = next_row if parsed_row = parse_row_to_h_internal(headers, row) rows << parsed_row end