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 4.0KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142
  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. /** @copybrief LemmaObject::New()
  32. * @copydetails LemmaObject::New()
  33. */
  34. static ASCIIParser* New();
  35. /** @copybrief LemmaObject::Delete()
  36. * @copydetails LemmaObject::Delete()
  37. */
  38. void Delete();
  39. // ==================== OPERATORS =======================
  40. // ==================== OPERATIONS =======================
  41. /** Opens the file up for reading. Throws an exception if something bad happens.
  42. @param[in] fname is the filename to be parsed.
  43. */
  44. void Open (const std::string& fname);
  45. /** Closes the file. Throws an exception if something bad happens.
  46. */
  47. void Close ( );
  48. /** Reads a series of Reals.
  49. * @param[in] nr is the number of reals to read. Enter -1 for the entire file
  50. * @todo throw exception if no file is open
  51. */
  52. std::vector<Real> ReadReals( const int& nr);
  53. /** Reads a series of Reals.
  54. * @param[in] nr is the number of ints to read. Enter -1 for the entire file
  55. * @todo throw exception if no file is open
  56. */
  57. std::vector<int> ReadInts( const int& nr);
  58. /** Reads a series of space delimited strings
  59. * @param[in] nr is the number of strings to read. Enter -1 for the entire file
  60. * @todo throw exception if no file is open
  61. */
  62. std::vector< std::string > ReadStrings( const int& nr);
  63. /**
  64. * @param[in] loc is the point in the file to jump to. Uses seekg
  65. */
  66. void JumpToLocation(const int& loc);
  67. // ==================== ACCESS =======================
  68. /** Sets the comment identifier key.
  69. * @param[in] key is a string identifying comments. All text after the key will be
  70. * ignored by the parser. Default is //
  71. */
  72. void SetCommentString( const std::string& key );
  73. /** Sets the buffer size. This affects the maximum number of column in a line. Defaults
  74. * is 255.
  75. * @param[in] BufferSize is the size of the buffer to use
  76. */
  77. void SetBufferSize( const int& BufferSize);
  78. /**
  79. * @return the current position in the file, as reported by istream::tellg
  80. */
  81. int GetFileLocation();
  82. // ==================== INQUIRY =======================
  83. protected:
  84. // ==================== LIFECYCLE =======================
  85. /** Default protected constructor, use New */
  86. ASCIIParser (const std::string& name);
  87. /** Default protected destructor, use Delete */
  88. ~ASCIIParser ();
  89. /**
  90. * @copybrief LemmaObject::Release()
  91. * @copydetails LemmaObject::Release()
  92. */
  93. void Release();
  94. private:
  95. // ==================== DATA MEMBERS =========================
  96. /** c++ style file IO */
  97. std::fstream input;
  98. /** comment string, defaults to c++ style // */
  99. std::string CommentString;
  100. /** Buffer size, max line width supported, defaults to 255 */
  101. int BufferSize;
  102. }; // ----- end of class ASCIIParser -----
  103. } // ----- end of Lemma name -----
  104. #endif // ----- #ifndef ASCIIPARSER_INC -----