⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 filefilterframe.hpp

📁 一个gps小工具包
💻 HPP
字号:
#pragma ident "$Id: FileFilterFrame.hpp 70 2006-08-01 18:36:21Z ehagen $"/** * @file FileFilterFrame.hpp * Wrapper for gpstk::FileHunter and gpstk::FileFilter */#ifndef GPSTK_FILEFILTERFRAME_HPP#define GPSTK_FILEFILTERFRAME_HPP//============================================================================////  This file is part of GPSTk, the GPS Toolkit.////  The GPSTk is free software; you can redistribute it and/or modify//  it under the terms of the GNU Lesser General Public License as published//  by the Free Software Foundation; either version 2.1 of the License, or//  any later version.////  The GPSTk is distributed in the hope that it will be useful,//  but WITHOUT ANY WARRANTY; without even the implied warranty of//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the//  GNU Lesser General Public License for more details.////  You should have received a copy of the GNU Lesser General Public//  License along with GPSTk; if not, write to the Free Software Foundation,//  Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA//  //  Copyright 2004, The University of Texas at Austin////============================================================================//============================================================================////This software developed by Applied Research Laboratories at the University of//Texas at Austin, under contract to an agency or agencies within the U.S. //Department of Defense. The U.S. Government retains all rights to use,//duplicate, distribute, disclose, or release this software. ////Pursuant to DoD Directive 523024 //// DISTRIBUTION STATEMENT A: This software has been approved for public //                           release, distribution is unlimited.////=============================================================================#include "FileSpec.hpp"#include "FileFilter.hpp"#include "FileHunter.hpp"#include "FileUtils.hpp"namespace gpstk{   /** @addtogroup filedirgroup */   //@{      /**       * This class is a wrapper for FileHunter and FileFilter, allowing you       * to easily pick what files you want to process and how to process       * them.  In the constructors, providing a start and end time will       * allow FileHunter to pick the correct files for that date range.       * After the object is built, it is ready for filtering.       *       * Use the filter(), sort(), unique() and touch() operators to run       * whatever operations you want to on the data, then write out the        * files when you're done.  You can also get access to the data with       * getData() and run whatever other post processing tools you would like       * to.         *       * See the examples in FileFilterFrameTest.cpp for a demonstration.       */   template <class FileStream, class FileData>   class FileFilterFrame : public FileFilter<FileData>   {   public:         /// Default constructor      FileFilterFrame(const gpstk::DayTime& start =                          gpstk::DayTime::BEGINNING_OF_TIME,                      const gpstk::DayTime& end =                          gpstk::DayTime::END_OF_TIME)         throw(gpstk::Exception);         /// Takes a list of files to open in lieu of day times      FileFilterFrame(const std::vector<std::string>& fileList,                      const gpstk::DayTime& start =                          gpstk::DayTime::BEGINNING_OF_TIME,                      const gpstk::DayTime& end =                          gpstk::DayTime::END_OF_TIME)         throw(gpstk::Exception);         /// Takes a file name for a single file filter.         /// This can throw an exception when there's a file error.      FileFilterFrame(const std::string& filename,                       const gpstk::DayTime& start =                          gpstk::DayTime::BEGINNING_OF_TIME,                      const gpstk::DayTime& end =                          gpstk::DayTime::END_OF_TIME)         throw(gpstk::Exception);         /// Uses the FileSpec to retrieve files.  Use filter like you would         /// in FileHunter, to filter FOR stations, receivers, etc.         /// This can throw an exception when there's a file error.      FileFilterFrame(const FileSpec& spec,                       const gpstk::DayTime& start =                          gpstk::DayTime::BEGINNING_OF_TIME,                      const gpstk::DayTime& end =                          gpstk::DayTime::END_OF_TIME,                      const std::vector<FileHunter::FilterPair>& filter =                       std::vector<FileHunter::FilterPair>())         throw(gpstk::Exception);         /// Gets the files from the file spec and the time, then adds         /// the data to the filter. Use filter like you would         /// in FileHunter, to filter FOR stations, receivers, etc.      FileFilterFrame&       newSource(const FileSpec& filespec,                 const gpstk::DayTime& start =                    gpstk::DayTime::BEGINNING_OF_TIME,                const gpstk::DayTime& end =                    gpstk::DayTime::END_OF_TIME,                const std::vector<FileHunter::FilterPair>& filter =                    std::vector<FileHunter::FilterPair>())         throw(gpstk::Exception);         /// Reads in the file and adds the data to the filter.      FileFilterFrame&       newSource(const std::string& filename,                 const gpstk::DayTime& start =                    gpstk::DayTime::BEGINNING_OF_TIME,                const gpstk::DayTime& end =                    gpstk::DayTime::END_OF_TIME)         throw(gpstk::Exception);         /// Takes a list of files to open in lieu of day times      FileFilterFrame&      newSource(const std::vector<std::string>& fileList,                const gpstk::DayTime& start =                    gpstk::DayTime::BEGINNING_OF_TIME,                const gpstk::DayTime& end =                    gpstk::DayTime::END_OF_TIME)         throw(gpstk::Exception);      virtual ~FileFilterFrame() {}         /**          * Writes the data to the file outputFile, truncating the          * output file if it already exists unless append is true.          * This can throw an exception when there's a file error.          * @return true when it works.          * @warning This will not write out headers for files that need them,          * and files that depend on header data will (like RINEX) will not          * be written correctly with this function.  Use           * FileFilterFrameWithHeader for those file types.          */      bool writeFile(const std::string& outputFile,                     const bool append = false) const         throw(gpstk::Exception);         /**          * Writes the data to the supplied stream.          * This can throw an exception when there's a file error.          * @return true when it works.          * @warning This will not write out headers for files that need them,          * and files that depend on header data will (like RINEX) will not          * be written correctly with this function.  Use           * FileFilterFrameWithHeader for those file types.          */      bool writeFile(FileStream& stream) const         throw(gpstk::Exception);   protected:         ///  Run init() to load the data into the filter.      void init(const std::vector<FileHunter::FilterPair>& filter=                 std::vector<FileHunter::FilterPair>())          throw(gpstk::Exception);   protected:            /// The file spec for this filter      FileSpec fs;         /// the start and end dates for the filter.      gpstk::DayTime startTime, endTime;   };   //@}   template <class FileStream, class FileData>   FileFilterFrame<FileStream,FileData> ::    FileFilterFrame(const gpstk::DayTime& start,                   const gpstk::DayTime& end)      throw(gpstk::Exception)         : startTime(start), endTime(end)   {}   template <class FileStream, class FileData>   FileFilterFrame<FileStream,FileData> ::    FileFilterFrame(const std::vector<std::string>& fileList,                   const gpstk::DayTime& start,                   const gpstk::DayTime& end)      throw(gpstk::Exception)         : startTime(start), endTime(end)   {      typename std::vector<std::string>::const_iterator itr;      for (itr = fileList.begin(); itr != fileList.end(); itr++)      {         fs.newSpec(*itr);         init();      }   }   template <class FileStream, class FileData>   FileFilterFrame<FileStream,FileData> ::    FileFilterFrame(const std::string& filename,                    const gpstk::DayTime& start,                   const gpstk::DayTime& end)      throw(gpstk::Exception)         : fs(filename), startTime(start), endTime(end)   {      init();   }   template <class FileStream, class FileData>   FileFilterFrame<FileStream,FileData> ::    FileFilterFrame(const FileSpec& spec,                    const gpstk::DayTime& start,                   const gpstk::DayTime& end,                   const std::vector<FileHunter::FilterPair>& filter)      throw(gpstk::Exception)         : fs(spec), startTime(start), endTime(end)   {      init(filter);   }   template <class FileStream, class FileData>   FileFilterFrame<FileStream, FileData>&    FileFilterFrame<FileStream,FileData> ::    newSource(const FileSpec& filespec,              const gpstk::DayTime& start,             const gpstk::DayTime& end,             const std::vector<FileHunter::FilterPair>& filter)      throw(gpstk::Exception)   {      startTime = start;      endTime = end;      fs = filespec;      init(filter);      return *this;   }   template <class FileStream, class FileData>   FileFilterFrame<FileStream, FileData>&    FileFilterFrame<FileStream,FileData> ::    newSource(const std::string& filename,              const gpstk::DayTime& start,             const gpstk::DayTime& end)      throw(gpstk::Exception)   {      startTime = start;      endTime = end;         fs.newSpec(filename);      init();      return *this;   }   template <class FileStream, class FileData>   FileFilterFrame<FileStream, FileData>&    FileFilterFrame<FileStream,FileData> ::    newSource(const std::vector<std::string>& fileList,              const gpstk::DayTime& start,             const gpstk::DayTime& end)      throw(gpstk::Exception)   {      startTime = start;      endTime = end;         typename std::vector<std::string>::const_iterator itr;      for (itr = fileList.begin(); itr != fileList.end(); itr++)      {         fs.newSpec(*itr);         init();      }      return *this;   }   template <class FileStream, class FileData>   void   FileFilterFrame<FileStream,FileData> ::    init(const std::vector<FileHunter::FilterPair>& filter)      throw(gpstk::Exception)   {         // find the files      FileHunter fh(fs);         typename std::vector<FileHunter::FilterPair>::const_iterator itr =          filter.begin();      while (itr != filter.end())      {         fh.setFilter((*itr).first, (*itr).second);         itr++;      }      std::vector<std::string> listOfFiles =          fh.find(startTime, endTime, FileSpec::ascending);         // for each file, read it into the filter      typename std::vector<std::string>::iterator i;      for(i = listOfFiles.begin(); i != listOfFiles.end(); i++)      {         FileStream s((*i).c_str());         if (s.good())         {            s.exceptions(std::ios::failbit);                     FileData data;                     while (s >> data)            {               addData(data);            }         }      }   }   template <class FileStream, class FileData>   bool FileFilterFrame<FileStream,FileData> ::    writeFile(const std::string& str,             const bool append) const      throw(gpstk::Exception)   {      if (!this->dataVec.empty())      {            // make the directory (if needed)         std::string::size_type pos = str.rfind('/');         if (pos != std::string::npos)            gpstk::FileUtils::makeDir(str.substr(0,pos).c_str(), 0755);               std::ios::openmode mode = std::ios::out;         if (append)            mode |= (std::ios::app|std::ios::ate);               FileStream stream(str.c_str(), mode);         return writeFile(stream);      }      return true;   }   template <class FileStream, class FileData>   bool FileFilterFrame<FileStream,FileData> ::    writeFile(FileStream& stream)      const throw(gpstk::Exception)   {      if (!this->dataVec.empty())      {         stream.exceptions(std::ios::failbit);                     typename std::list<FileData>::const_iterator index;         for(index = this->dataVec.begin(); index != this->dataVec.end(); index++)            (*index).putRecord(stream);      }      return true;   }}  // namespace gpstk#endif // GPSTK_FILEFILTERFRAME_HPP

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -