///////////////////////////////////////////////////////////////////////////////// // // Copyright (C) 2017- Statoil ASA // // ResInsight is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // ResInsight 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 General Public License at // for more details. // ///////////////////////////////////////////////////////////////////////////////// #include "RifKeywordVectorParser.h" #include "RiaStdStringTools.h" #include "RifEclipseUserDataParserTools.h" #include "cvfAssert.h" //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- RifKeywordVectorParser::RifKeywordVectorParser( const QString& data ) { parseData( data ); } //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- const std::vector& RifKeywordVectorParser::keywordBasedVectors() const { return m_keywordBasedVectors; } //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- bool RifKeywordVectorParser::canBeParsed( const QString& data ) { std::stringstream streamData; streamData.str( data.toStdString() ); std::string line; std::getline( streamData, line ); while ( streamData.good() ) { if ( RifEclipseUserDataParserTools::isAComment( line ) ) { std::getline( streamData, line ); } else if ( line.find( "VECTOR" ) == 0 ) { return true; } else { return false; } } return false; } //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- void RifKeywordVectorParser::parseData( const QString& data ) { std::stringstream streamData; streamData.str( data.toStdString() ); std::string line; std::getline( streamData, line ); do { while ( RifEclipseUserDataParserTools::isLineSkippable( line ) && !streamData.eof() ) { std::getline( streamData, line ); } KeywordBasedVector keywordBasedVector; keywordBasedVector.header = RifEclipseUserDataParserTools::headerReader( streamData, line ); if ( keywordBasedVector.header.empty() ) break; double value = 0.0; while ( RifEclipseUserDataParserTools::isANumber( line ) ) { RiaStdStringTools::toDouble( line, value ); keywordBasedVector.values.push_back( value ); std::getline( streamData, line ); } m_keywordBasedVectors.push_back( keywordBasedVector ); } while ( !streamData.eof() ); }