00001
00002
00004
00005 #ifdef WIN32
00006 #pragma warning(disable:4786)
00007 #endif
00008 #include "FileReader.h"
00009
00010 #include <fstream>
00011 #include <string>
00012 #include <iterator>
00013 #include <stdio.h>
00014 #include <string.h>
00015
00016
00018
00020 namespace Interpolator
00021 {
00023 FileReader::FileReader()
00024 {
00025
00026 }
00027
00029 FileReader::~FileReader()
00030 {
00031
00032 }
00033
00040 FileReader::FileReader(const std::string& sFileName) : _sFileName(sFileName)
00041 {
00042 if(isReadable())
00043 {
00044 copyFileToBuffer();
00045 setBufferSize(extractBufferSize());
00046 setFileSize(extractFileSize());
00047 setNbFileLines(extractNbFileLines());
00048 extractHeader();
00049 if(Interpolator::_verb == true) cout << "Open file : " << sFileName << " --> OK" << endl;
00050 }
00051 else throw FileNotFoundException(sFileName,"FileReader::FileReader(const std::string& sFileName)",__FILE__,__LINE__);
00052 }
00053
00062 FileReader::FileReader(const std::string& sFileName,long lNbVariables,long lNbData) : _sFileName(sFileName),_lNbVariables(lNbVariables),_lNbData(lNbData)
00063 {
00064 if(isReadable())
00065 {
00066 copyFileToBuffer();
00067 setBufferSize(extractBufferSize());
00068 setFileSize(extractFileSize());
00069 setNbFileLines(extractNbFileLines());
00070 if(Interpolator::_verb == true) cout << "Open file : " << sFileName << " --> OK" << endl;
00071 }
00072 else throw FileNotFoundException(sFileName,"FileReader::FileReader(const std::string& sFileName,long lNbVariables,long lNbData)",__FILE__,__LINE__);
00073 }
00074
00075
00077 bool FileReader::isReadable()
00078 {
00079
00080 if (_sFileName.empty()) return false;
00081 else
00082 {
00083 ifstream mFile( _sFileName.c_str() );
00084 return mFile != 0;
00085 }
00086
00087 }
00088
00090 long FileReader::extractFileSize()
00091 {
00092 ifstream mFile(_sFileName.c_str());
00093 long pos,size;
00094 if (mFile)
00095 {
00096 pos = mFile.tellg();
00097 mFile.seekg( 0 , ios_base::end );
00098 size = mFile.tellg() ;
00099 mFile.seekg( pos, ios_base::beg );
00100 }
00101 else throw FileNotFoundException(_sFileName,"FileReader::extractNbFileLines()",__FILE__,__LINE__);
00102 return size;
00103 }
00104
00105
00106
00107
00108
00109
00110
00111
00112
00113
00114
00115
00116
00117
00118
00119
00120
00121
00122
00123
00124 void FileReader::extractHeader()
00125 {
00126 ifstream mFile(_sFileName.c_str());
00127 if (mFile)
00128 {
00129 _lNbVariables = extractInt();
00130 _lNbData = extractInt();
00131 }
00132 }
00133
00134
00137 long FileReader::extractNbFileLines()
00138 {
00139 ifstream mFile(_sFileName.c_str());
00140 int iLines = 0;
00141 if ( mFile )
00142 {
00143 iLines = count( istreambuf_iterator<char>( mFile ),
00144 istreambuf_iterator<char>(),
00145 '\n' );
00146 }
00147 else throw FileNotFoundException(_sFileName,"FileReader::extractNbFileLines()",__FILE__,__LINE__);
00148 return iLines+1;
00149 }
00150
00151
00153 std::string FileReader::extractLine()
00154 {
00155 std::string sLine;
00156 getline(_mFileBuffer, sLine );
00157 return sLine;
00158 }
00159
00161 double FileReader::extractDouble()
00162 {
00163
00164 std::string sTemp;
00165 sTemp = extractString();
00166 return atof(sTemp.c_str());
00167 }
00168
00170 int FileReader::extractInt()
00171 {
00172 std::string sTemp;
00173 sTemp = extractString();
00174 return atoi(sTemp.c_str());
00175 }
00176
00178 std::string FileReader::extractString()
00179 {
00180 std::string sTemp;
00181 _mFileBuffer >> sTemp;
00182 return sTemp;
00183 }
00184
00186 long FileReader::extractBufferSize()
00187 {
00188 return (long)_mFileBuffer.str().size();
00189 }
00190
00194 void FileReader::copyFileToBuffer()
00195 {
00196 ifstream mFile(_sFileName.c_str());
00197
00198 if ( mFile )
00199 {
00200 _mFileBuffer << mFile.rdbuf();
00201 mFile.close();
00202 setBufferSize(extractBufferSize());
00203 }
00204 else throw FileNotFoundException(_sFileName,"FileReader::copyFileToBuffer()",__FILE__,__LINE__);
00205 }
00206
00208 long FileReader::getFileSize() const
00209 {
00210 return _lFileSize;
00211 }
00212
00214 long FileReader::getNbFileLines() const
00215 {
00216 return _lNbFileLines;
00217 }
00218
00220 long FileReader::getNbData() const
00221 {
00222 return _lNbData;
00223 }
00224
00226 long FileReader::getNbVariables() const
00227 {
00228 return _lNbVariables;
00229 }
00230
00232 long FileReader::getBufferSize() const
00233 {
00234 return _lBufferSize;
00235 }
00236
00238 void FileReader::setBufferSize(long lBufferSize)
00239 {
00240 _lBufferSize = lBufferSize;
00241 }
00242
00244 void FileReader::setNbVariables(long lNbVariables)
00245 {
00246 _lNbVariables = lNbVariables;
00247 }
00248
00250 void FileReader::setFileSize(long lFileSize)
00251 {
00252 _lFileSize = lFileSize;
00253 }
00254
00256 void FileReader::setNbFileLines(long lNbFileLines)
00257 {
00258 _lNbFileLines = lNbFileLines;
00259 }
00260
00262 void FileReader::setNbData(long lNbData)
00263 {
00264 _lNbData = lNbData;
00265 }
00266
00267
00268 }
00269