00001 #include "csv.hh"
00002
00003 #include <vector>
00004
00005 namespace fatalmind {
00006
00007 class CheckedCsvReader: public csv {
00008 public:
00009 CheckedCsvReader(std::istream& is, int r = 0);
00010 virtual ~CheckedCsvReader() {
00011 }
00012
00013 virtual void record(int l, std::vector<std::string>& ) = 0;
00014 virtual void missingField(int f, int r, int l) {
00015 }
00016 virtual void extraField(int f, int r, int l) {
00017 }
00018
00019 int getExtraFields() {
00020 return extra;
00021 }
00022
00023 int getMissingFields() {
00024 return missing;
00025 }
00026
00027 int getErrors() {
00028 return missing + extra;
00029 }
00030
00031
00032 private:
00033 void field(int f, int l, const std::ostringstream& os);
00034 void endRecord(int f, int l);
00035
00036 void missing_(int f, int r, int l) {
00037 ++missing;
00038 missingField(f, r, l);
00039 }
00040
00041 void extra_(int f, int r, int l) {
00042 ++extra;
00043 extraField(f, r, l);
00044 }
00045
00046 std::vector<std::string> vec;
00047
00048 int required;
00049 int missing;
00050 int extra;
00051 };
00052
00053 }