Я бы, вероятно, создал небольшую структуру данных, которая сообщает, как (и если) отображать каждый столбец:
struct column_display {
bool display;
int width;
column_display(bool d) : display(d), width(0) {}
};
Затем мы добавили бы некоторый код для чтения каждого имени: отобразить пару из файла:
std::istream &operator>>(std::istream &is, std::pair<std::string, column_display> &c) {
std::string name, value;
std::getline(is, name, '=');
std::getline(is, value);
c.first = name;
c.second.display = (value == "yes");
return is;
}
Затем вы прочитали бы свои данные для столбцов в эти структуры (и предположительно добавили бы правильные значения ширины, так или иначе, либо сохраненные внутри, либо из другого внешнего источника):
std::map<std::string, column_display> params((std::istream_iterator(params)),
std::istream_iterator());
Наконец, вы выписали бы данные, используя указанные параметры:
class display {
record_t const &r;
std::ostream &out;
public:
display(record_t const &record, std::ostream &o) : r(record), out(o) {}
display &operator()(std::pair<std::string, column_display> const &d) {
if (d.second.display)
out << d.second.width << r.fields[d.first];
}
}
for (current_record = 0; current_record<record_count; current_record++) {
display display_record(records[current_record], std::cout);
std::for_each(params.begin(), params.end(), display_record);
}
По крайней мере, на данный момент это предполагает, что ваш тип записи также является картой (или чем-то в этом порядке), которая позволяет вам искать данные на основе того же имени столбца, которое читается из файла userTemplate.txt.