Lemma is an Electromagnetics API
Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.

ASCIIParser.h 3.9KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  1. /* This file is part of Lemma, a geophysical modelling and inversion API.
  2. * More information is available at http://lemmasoftware.org
  3. */
  4. /* This Source Code Form is subject to the terms of the Mozilla Public
  5. * License, v. 2.0. If a copy of the MPL was not distributed with this
  6. * file, You can obtain one at http://mozilla.org/MPL/2.0/.
  7. */
  8. /**
  9. * @file
  10. * @date 09/23/2013 02:31:24 PM
  11. * @version $Id$
  12. * @author Trevor Irons (ti)
  13. * @email Trevor.Irons@xri-geo.com
  14. * @copyright Copyright (c) 2013, XRI Geophysics, LLC
  15. * @copyright Copyright (c) 2013, Trevor Irons
  16. */
  17. #ifndef ASCIIPARSER_INC
  18. #define ASCIIPARSER_INC
  19. #include "LemmaObject.h"
  20. #include <fstream>
  21. namespace Lemma {
  22. /**
  23. \brief Provides ASCII input file parsing
  24. \details Able to accomodate various inputs and comment styles
  25. */
  26. class ASCIIParser : public LemmaObject {
  27. friend std::ostream &operator<<(std::ostream &stream,
  28. const ASCIIParser &ob);
  29. public:
  30. // ==================== LIFECYCLE =======================
  31. /**
  32. * Factory method for generating concrete class.
  33. * @return a std::shared_ptr of type ASCIIParser
  34. */
  35. static std::shared_ptr< ASCIIParser > NewSP();
  36. // ==================== OPERATORS =======================
  37. // ==================== OPERATIONS =======================
  38. /** Opens the file up for reading. Throws an exception if something bad happens.
  39. @param[in] fname is the filename to be parsed.
  40. */
  41. void Open (const std::string& fname);
  42. /** Closes the file. Throws an exception if something bad happens.
  43. */
  44. void Close ( );
  45. /** Reads a series of Reals.
  46. * @param[in] nr is the number of reals to read. Enter -1 for the entire file
  47. * @todo throw exception if no file is open
  48. */
  49. std::vector<Real> ReadReals( const int& nr);
  50. /** Reads a series of Reals.
  51. * @param[in] nr is the number of ints to read. Enter -1 for the entire file
  52. * @todo throw exception if no file is open
  53. */
  54. std::vector<int> ReadInts( const int& nr);
  55. /** Reads a series of space delimited strings
  56. * @param[in] nr is the number of strings to read. Enter -1 for the entire file
  57. * @todo throw exception if no file is open
  58. */
  59. std::vector< std::string > ReadStrings( const int& nr);
  60. /**
  61. * @param[in] loc is the point in the file to jump to. Uses seekg
  62. */
  63. void JumpToLocation(const int& loc);
  64. // ==================== ACCESS =======================
  65. /** Sets the comment identifier key.
  66. * @param[in] key is a string identifying comments. All text after the key will be
  67. * ignored by the parser. Default is //
  68. */
  69. void SetCommentString( const std::string& key );
  70. /** Sets the buffer size. This affects the maximum number of column in a line. Defaults
  71. * is 255.
  72. * @param[in] BufferSize is the size of the buffer to use
  73. */
  74. void SetBufferSize( const int& BufferSize);
  75. /**
  76. * @return the current position in the file, as reported by istream::tellg
  77. */
  78. int GetFileLocation();
  79. // ==================== INQUIRY =======================
  80. protected:
  81. // ==================== LIFECYCLE =======================
  82. /** Default protected constructor, use New */
  83. ASCIIParser (const std::string& name);
  84. /** Default protected destructor, use Delete */
  85. ~ASCIIParser ();
  86. /**
  87. * @copybrief LemmaObject::Release()
  88. * @copydetails LemmaObject::Release()
  89. */
  90. void Release();
  91. private:
  92. // ==================== DATA MEMBERS =========================
  93. /** c++ style file IO */
  94. std::fstream input;
  95. /** comment string, defaults to c++ style // */
  96. std::string CommentString;
  97. /** Buffer size, max line width supported, defaults to 255 */
  98. int BufferSize;
  99. }; // ----- end of class ASCIIParser -----
  100. } // ----- end of Lemma name -----
  101. #endif // ----- #ifndef ASCIIPARSER_INC -----