diff --git a/csv.h b/csv.h index 1f697e1..ce3291f 100644 --- a/csv.h +++ b/csv.h @@ -890,10 +890,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); @@ -903,6 +905,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){ @@ -1165,7 +1169,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; @@ -1185,6 +1189,23 @@ namespace io{ col_order[i] = i; } + void set_header_from_self(){ + 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; + } + + size_t order_size = col_order.size(); + for (; i < order_size; 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(),