diff options
Diffstat (limited to 'parse_csv.c')
-rw-r--r-- | parse_csv.c | 33 |
1 files changed, 29 insertions, 4 deletions
diff --git a/parse_csv.c b/parse_csv.c index 12e98f3..423fe77 100644 --- a/parse_csv.c +++ b/parse_csv.c @@ -168,17 +168,42 @@ vector<vector<datum> > readCSV(istream &in) { return table; } +// Scan the data array, +// looking for records that look like headers +// (as opposed to numerical data). +template<class datum = qstring> +int count_header(vector<vector<datum> > const aoa){ + int NR = aoa.size(); + int hh = 0; + for (; hh < NR; hh++) { + if (aoa[hh].size() == 0) continue; + string word = aoa[hh][0]; + size_t where; + where = word.find_first_not_of(" "); + if (where == string::npos) continue; + word = word.substr(where); + try { + stod(word, &where); // don't care about return value + } + catch (exception& ee) { + continue; + } + word = word.substr(where); + where = word.find_first_not_of(" "); + if (where == string::npos) break; + } + return hh; +} + // Explicit instantiation for the <qstring> version. // If you want some other version, you'll have to instantiate it. template vector<qstring> readCSVRow<qstring>(istream& input); template vector<vector<qstring> >readCSV<qstring>(istream &in); -// Apparently it's not necessary to mention get_q() here, -// but probably more portable to do it anyway: -////template int get_q<qstring>(qstring const&); +template int count_header(vector<vector<qstring> > const aoa); #if 1 // Explicit instantiation for the <string> version. template vector<string> readCSVRow<string>(istream& input); template vector<vector<string> >readCSV<string>(istream &in); -/////template int get_q<string>(string const&); +template int count_header(vector<vector<string> > const aoa); #endif |