ColumnDataReader.hpp
00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029 #ifndef _COLUMNDATAREADER_HPP_
00030 #define _COLUMNDATAREADER_HPP_
00031
00032 #include "AbstractDataReader.hpp"
00033
00034 #include <string>
00035 #include <vector>
00036 #include <map>
00037
00038 #include "FileFinder.hpp"
00039
00043 class ColumnDataReader : public AbstractDataReader
00044 {
00045 private:
00046
00047 std::map<std::string, int> mVariablesToColumns;
00048 std::map<std::string, std::string> mVariablesToUnits;
00049 int mNumFixedDimensions;
00050 bool mHasUnlimitedDimension;
00051 int mNumVariables;
00052 std::string mInfoFilename;
00053 std::string mDataFilename;
00054 std::string mAncillaryFilename;
00055 std::vector<double> mValues;
00056 unsigned mFieldWidth;
00057 static const int SPACING = 2;
00065 void PushColumnEntryFromLine(const std::string& rLine, int col);
00066
00073 void ReadColumnFromFile(const std::string& rFilename, int col);
00074
00082 void ReadValueFromFile(const std::string& rFilename, int col, int row);
00083
00091 void CheckFiles(const std::string& rDirectory, const std::string& rBaseName);
00092
00093 public:
00094
00112 ColumnDataReader(const std::string& rDirectory,
00113 const std::string& rBaseName,
00114 bool makeAbsolute=true);
00115
00123 ColumnDataReader(const FileFinder& rDirectory,
00124 const std::string& rBaseName);
00125
00131 std::vector<double> GetValues(const std::string& rVariableName);
00132
00139 std::vector<double> GetValues(const std::string& rVariableName, int fixedDimension);
00140
00144 std::vector<double> GetUnlimitedDimensionValues();
00145
00151 bool HasValues(const std::string& rVariableName);
00152
00156 unsigned GetFieldWidth();
00157 };
00158
00159 #endif //_COLUMNDATAREADER_HPP_