From 1ab57a49d9c3fa2bf127d16e7c89518316240c9c Mon Sep 17 00:00:00 2001 From: Taras Kushnir Date: Tue, 7 Jul 2020 07:59:18 +0300 Subject: [PATCH 1/2] Add ability to parse headers easier --- csv.h | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/csv.h b/csv.h index 8b6b7f1..dda4206 100644 --- a/csv.h +++ b/csv.h @@ -888,10 +888,12 @@ namespace io{ void parse_header_line( char*line, std::vector&col_order, + std::vector&col_names, const std::string*col_name, ignore_column ignore_policy ){ col_order.clear(); + col_names.clear(); bool found[column_count]; std::fill(found, found + column_count, false); @@ -901,6 +903,7 @@ namespace io{ trim_policy::trim(col_begin, col_end); quote_policy::unescape(col_begin, col_end); + col_names.push_back(std::string(col_begin)); for(unsigned i=0; icol_order; + std::vectorcol_names; template void set_column_names(std::string s, ColNames...cols){ @@ -1163,7 +1167,7 @@ namespace io{ detail::parse_header_line - (line, col_order, column_names, ignore_policy); + (line, col_order, col_names, column_names, ignore_policy); }catch(error::with_file_name&err){ err.set_file_name(in.get_truncated_file_name()); throw; @@ -1183,6 +1187,22 @@ namespace io{ col_order[i] = i; } + void set_header_from_self(){ + size_t size = col_names.size(); + size_t i = 0; + for (; i < size; i++) { + column_names[i] = col_names[i]; + col_order[i] = i; + } + + for (; i < column_count; i++) { + //column_names[i] = col_names[i]; + col_order[i] = -1; + } + } + + const std::vector &get_col_names() const { return col_names; } + bool has_column(const std::string&name) const { return col_order.end() != std::find( col_order.begin(), col_order.end(), From 31c38a980dd5ff1edf634c72c4357d739f72250b Mon Sep 17 00:00:00 2001 From: Taras Kushnir Date: Sat, 12 Sep 2020 20:09:41 +0300 Subject: [PATCH 2/2] Fix crash on Windows --- csv.h | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/csv.h b/csv.h index ba3f004..ce3291f 100644 --- a/csv.h +++ b/csv.h @@ -1190,14 +1190,15 @@ namespace io{ } void set_header_from_self(){ - size_t size = col_names.size(); + const size_t size = col_names.size(); size_t i = 0; for (; i < size; i++) { column_names[i] = col_names[i]; col_order[i] = i; } - for (; i < column_count; i++) { + size_t order_size = col_order.size(); + for (; i < order_size; i++) { //column_names[i] = col_names[i]; col_order[i] = -1; }