38 #include "CSV_Header.h" 39 #include "CSV_Utils.h" 41 #include <BESInternalError.h> 43 CSV_Header::CSV_Header()
45 _hdr =
new map<string, CSV_Field*>;
46 _index2field =
new map<int, string>;
49 CSV_Header::~CSV_Header()
52 map<string, CSV_Field*>::iterator i = _hdr->begin();
53 map<string, CSV_Field*>::iterator e = _hdr->end();
68 bool CSV_Header::populate(vector<string> *headerinfo)
const 70 string::size_type lastPos;
76 vector<string>::iterator it = headerinfo->begin();
77 vector<string>::iterator et = headerinfo->end();
78 for (; it != et; it++) {
79 string headerinfo_s = (*it);
81 string::size_type headerinfo_l = headerinfo_s.length();
84 lastPos = headerinfo_s.find_first_of(
"<", 0);
85 if (lastPos == string::npos) {
87 err <<
"malformed header information in column " << fieldIndex <<
", missing type in " << headerinfo_s;
90 if (*(--headerinfo_s.end()) !=
'>') {
92 err <<
"malformed header information in column " << fieldIndex <<
", missing type in " << headerinfo_s;
95 fieldName = headerinfo_s.substr(0, lastPos);
96 fieldType = headerinfo_s.substr(lastPos + 1, headerinfo_l - lastPos - 2);
99 field->insertName(fieldName);
100 field->insertType(fieldType);
101 field->insertIndex(fieldIndex);
103 _hdr->insert(make_pair(fieldName, field));
104 _index2field->insert(make_pair(fieldIndex, fieldName));
113 CSV_Header::getField(
const int& index)
116 if (_index2field->find(index) != _index2field->end()) {
117 string fieldName = _index2field->find(index)->second;
118 f = _hdr->find(fieldName)->second;
122 err <<
"Could not find field in column " << index;
129 CSV_Header::getField(
const string& fieldName)
132 if (_hdr->find(fieldName) != _hdr->end()) {
133 f = _hdr->find(fieldName)->second;
137 err <<
"Could not find field \"" << fieldName;
143 const string CSV_Header::getFieldType(
const string& fieldName)
146 map<string, CSV_Field*>::iterator it = _hdr->find(fieldName);
148 if (it != _hdr->end()) {
149 type = (it->second)->getType();
154 void CSV_Header::getFieldList(vector<string> &list)
156 for (
unsigned int index = 0; index < _index2field->size(); index++) {
157 list.push_back(_index2field->find(index)->second);
163 strm << BESIndent::LMarg <<
"CSV_Header::dump - (" << (
void *)
this <<
")" << endl;
165 map<int, string>::const_iterator ii = _index2field->begin();
166 map<int, string>::const_iterator ie = _index2field->end();
167 for (; ii != ie; ii++) {
168 strm << BESIndent::LMarg << (*ii).first <<
": " << (*ii).second << endl;
170 map<string, CSV_Field*>::const_iterator fi = _hdr->begin();
171 map<string, CSV_Field*>::const_iterator fe = _hdr->end();
172 for (; fi != fe; fi++) {
173 strm << BESIndent::LMarg << (*fi).first <<
": " << endl;
175 (*fi).second->dump(strm);
176 BESIndent::UnIndent();
178 BESIndent::UnIndent();
static void slim(string &str)
Strips leading and trailing double quotes from string.
exception thrown if inernal error encountered