Skip to content

Commit b516b09

Browse files
committed
csv_parser header
1 parent e001276 commit b516b09

File tree

2 files changed

+47
-19
lines changed

2 files changed

+47
-19
lines changed

include/jsoncons_ext/csv/csv_parser.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1474,7 +1474,7 @@ class basic_csv_parser : public ser_context
14741474
{
14751475
trim_string_buffer(trim_leading_inside_quotes_,trim_trailing_inside_quotes_);
14761476
}
1477-
if (line_ == (header_line_+header_line_offset_))
1477+
if (line_ == (header_line_+header_line_offset_) && column_index_ >= min_column_names_)
14781478
{
14791479
column_names_.push_back(buffer_);
14801480
if (assume_header_ && mapping_kind_ == csv_mapping_kind::n_rows)

test/csv/src/csv_tests.cpp

Lines changed: 46 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -663,28 +663,56 @@ TEST_CASE("csv_test1_object_3cols")
663663

664664
TEST_CASE("csv_test1_object_3cols_header")
665665
{
666-
std::string text = "a,b,c\n1,2,3\n4,5,6";
667-
std::istringstream is(text);
666+
SECTION("test 1")
667+
{
668+
std::string text = "a,b,c\n1,2,3\n4,5,6";
669+
std::istringstream is(text);
668670

669-
json_decoder<json> decoder;
671+
json_decoder<json> decoder;
670672

671-
auto options = csv::csv_options{}
672-
.column_names("x,y,z")
673-
.header_lines(1);
673+
auto options = csv::csv_options{}
674+
.column_names("x,y,z")
675+
.header_lines(1);
674676

675-
csv::csv_stream_reader reader(is,decoder,options);
676-
reader.read();
677-
json val = decoder.get_result();
677+
csv::csv_stream_reader reader(is,decoder,options);
678+
reader.read();
679+
json val = decoder.get_result();
680+
681+
CHECK(2 == val.size());
682+
CHECK(3 == val[0].size());
683+
CHECK(3 == val[1].size());
684+
CHECK(json(1) == val[0]["x"]);
685+
CHECK(json(2) == val[0]["y"]);
686+
CHECK(json(3) == val[0]["z"]);
687+
CHECK(json(4) == val[1]["x"]);
688+
CHECK(json(5) == val[1]["y"]);
689+
CHECK(json(6) == val[1]["z"]);
690+
}
691+
SECTION("test 2")
692+
{
693+
std::string text = "a,b,c\n1,2,3\n4,5,6";
694+
std::istringstream is(text);
678695

679-
CHECK(2 == val.size());
680-
CHECK(3 == val[0].size());
681-
CHECK(3 == val[1].size());
682-
CHECK(json(1) == val[0]["x"]);
683-
CHECK(json(2) == val[0]["y"]);
684-
CHECK(json(3) == val[0]["z"]);
685-
CHECK(json(4) == val[1]["x"]);
686-
CHECK(json(5) == val[1]["y"]);
687-
CHECK(json(6) == val[1]["z"]);
696+
json_decoder<json> decoder;
697+
698+
auto options = csv::csv_options{}
699+
.column_names("x,y")
700+
.header_lines(1);
701+
702+
csv::csv_stream_reader reader(is,decoder,options);
703+
reader.read();
704+
json val = decoder.get_result();
705+
706+
CHECK(2 == val.size());
707+
CHECK(3 == val[0].size());
708+
CHECK(3 == val[1].size());
709+
CHECK(json(1) == val[0]["x"]);
710+
CHECK(json(2) == val[0]["y"]);
711+
CHECK(json(3) == val[0]["c"]);
712+
CHECK(json(4) == val[1]["x"]);
713+
CHECK(json(5) == val[1]["y"]);
714+
CHECK(json(6) == val[1]["c"]);
715+
}
688716
}
689717

690718
TEST_CASE("csv_test1_object_3cols_bool")

0 commit comments

Comments
 (0)