FileReader.cpp

Go to the documentation of this file.
00001 // FileReader.cpp: implementation of the FileReader class.
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 // Construction/Destruction
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)// throw (FileNotFoundException)
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) // throw (FileNotFoundException)
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() // throw (FileNotFoundException)
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 /*///Extract the number of columns (for file providing a header with the number of columns in it)
00106 long FileReader::extractNbVariables()
00107 {       
00108         ifstream mFile(_sFileName.c_str());
00109         if (mFile) 
00110         {
00111                 _lNbVariables = extractInt();
00112         }
00113         return _lNbVariables;
00114 }
00115 */
00116 /*///Extract the number of lines (for file providing a header with the number of lines in it)
00117 long FileReader::extractNbData()
00118 {
00119         _lNbData = 20;
00120         return _lNbData;
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() // throw (FileNotFoundException)
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() // throw (FileNotFoundException)
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 

Generated on Tue Apr 14 09:50:27 2009 for Interpolator Library by  doxygen 1.4.5