mirror of
https://github.com/OPM/ResInsight.git
synced 2025-02-25 18:55:39 -06:00
Fix invalid parsing of line with keyword end tag and comment
* Add error text when size differs * #9845: Remove invalid parsing of data in comment line The line '/ -- 123 123' was parsed incorrectly, and values 123 123 was added to the list of valid values for the keyword.
This commit is contained in:
parent
20439e1da9
commit
edbeb4dfb1
@ -193,8 +193,12 @@ bool RifEclipseInputFileTools::openGridFile( const QString& fileName,
|
||||
|
||||
ecl_grid_free( inputGrid );
|
||||
|
||||
QString errorMessages;
|
||||
|
||||
// Import additional keywords as input properties
|
||||
RifEclipseInputPropertyLoader::createInputPropertiesFromKeywords( eclipseCase, objects );
|
||||
RifEclipseInputPropertyLoader::createInputPropertiesFromKeywords( eclipseCase, objects, &errorMessages );
|
||||
|
||||
if ( !errorMessages.isEmpty() ) RiaLogging::error( errorMessages );
|
||||
|
||||
return true;
|
||||
}
|
||||
|
@ -40,7 +40,7 @@ QString RifEclipseInputPropertyLoader::evaluateAndCreateInputPropertyResult( Rig
|
||||
QString* errorMessage )
|
||||
{
|
||||
auto eclipseKeyword = keywordContent.keyword;
|
||||
if ( isInputPropertyCandidate( eclipseCase, eclipseKeyword, keywordContent.values.size() ) )
|
||||
if ( isInputPropertyCandidate( eclipseCase, eclipseKeyword, keywordContent.values.size(), errorMessage ) )
|
||||
{
|
||||
QString newResultName = eclipseCase->results( RiaDefines::PorosityModelType::MATRIX_MODEL )
|
||||
->makeResultNameUnique( QString::fromStdString( eclipseKeyword ) );
|
||||
@ -58,11 +58,12 @@ QString RifEclipseInputPropertyLoader::evaluateAndCreateInputPropertyResult( Rig
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
void RifEclipseInputPropertyLoader::createInputPropertiesFromKeywords( RigEclipseCaseData* eclipseCase,
|
||||
const std::vector<RifEclipseKeywordContent>& keywordContent )
|
||||
const std::vector<RifEclipseKeywordContent>& keywordContent,
|
||||
QString* errorText )
|
||||
{
|
||||
for ( const auto& keywordAndValues : keywordContent )
|
||||
{
|
||||
RifEclipseInputPropertyLoader::evaluateAndCreateInputPropertyResult( eclipseCase, keywordAndValues, nullptr );
|
||||
RifEclipseInputPropertyLoader::evaluateAndCreateInputPropertyResult( eclipseCase, keywordAndValues, errorText );
|
||||
}
|
||||
}
|
||||
|
||||
@ -71,13 +72,27 @@ void RifEclipseInputPropertyLoader::createInputPropertiesFromKeywords( RigEclips
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
bool RifEclipseInputPropertyLoader::isInputPropertyCandidate( const RigEclipseCaseData* caseData,
|
||||
const std::string& eclipseKeyword,
|
||||
size_t numberOfValues )
|
||||
size_t numberOfValues,
|
||||
QString* errorText )
|
||||
{
|
||||
CVF_ASSERT( caseData );
|
||||
|
||||
if ( !isValidDataKeyword( QString::fromStdString( eclipseKeyword ) ) ) return false;
|
||||
|
||||
return ( numberOfValues == caseData->mainGrid()->cellCount() );
|
||||
if ( numberOfValues != caseData->mainGrid()->cellCount() )
|
||||
{
|
||||
if ( errorText )
|
||||
{
|
||||
*errorText += QString( "Keyword %1 has %2 values, but the grid has %3 cells" )
|
||||
.arg( QString::fromStdString( eclipseKeyword ) )
|
||||
.arg( numberOfValues )
|
||||
.arg( caseData->mainGrid()->cellCount() );
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
|
@ -42,7 +42,8 @@ class RifEclipseInputPropertyLoader
|
||||
{
|
||||
public:
|
||||
static void createInputPropertiesFromKeywords( RigEclipseCaseData* eclipseCase,
|
||||
const std::vector<RifEclipseKeywordContent>& keywordContent );
|
||||
const std::vector<RifEclipseKeywordContent>& keywordContent,
|
||||
QString* errorText );
|
||||
|
||||
// Returns map of assigned resultName and Eclipse Keyword.
|
||||
static std::map<QString, QString> readProperties( const QString& fileName, RigEclipseCaseData* eclipseCase );
|
||||
@ -56,7 +57,8 @@ private:
|
||||
|
||||
static bool isInputPropertyCandidate( const RigEclipseCaseData* caseData,
|
||||
const std::string& eclipseKeyword,
|
||||
size_t numberOfValues );
|
||||
size_t numberOfValues,
|
||||
QString* errorText );
|
||||
|
||||
static bool appendNewInputPropertyResult( RigEclipseCaseData* caseData,
|
||||
const QString& resultName,
|
||||
|
@ -147,6 +147,13 @@ std::pair<std::string, std::vector<float>>
|
||||
continue;
|
||||
}
|
||||
|
||||
// End of keyword is defined by '/', parse values of line until '/' is found
|
||||
auto positionOfEndToken = line.find_first_of( '/' );
|
||||
if ( positionOfEndToken != std::string::npos )
|
||||
{
|
||||
line = line.substr( 0, positionOfEndToken );
|
||||
}
|
||||
|
||||
if ( !isEndTokenKeywordRead )
|
||||
{
|
||||
size_t start = 0;
|
||||
@ -186,8 +193,7 @@ std::pair<std::string, std::vector<float>>
|
||||
}
|
||||
}
|
||||
|
||||
// End of keyword is defined by '/'
|
||||
if ( line.find_first_of( '/' ) != std::string::npos )
|
||||
if ( positionOfEndToken != std::string::npos )
|
||||
{
|
||||
isEndTokenKeywordRead = true;
|
||||
continue;
|
||||
|
@ -216,11 +216,14 @@ TEST( RifEclipseTextFileReader, KeywordsWithoutValue )
|
||||
"/\n"
|
||||
"SOIL\n"
|
||||
"6.0 7.0 8.0 9.0\n"
|
||||
"/\n";
|
||||
"/\n"
|
||||
"G4\n"
|
||||
"1.0 2.0 3.0\n"
|
||||
"0.123/ -- 1213 values in comment 123.123 \n";
|
||||
|
||||
auto keywordDataItems = RifEclipseTextFileReader::parseStringData( fileContent );
|
||||
|
||||
EXPECT_EQ( 3u, keywordDataItems.size() );
|
||||
EXPECT_EQ( 4u, keywordDataItems.size() );
|
||||
|
||||
auto noEchoKeyword = keywordDataItems[0];
|
||||
EXPECT_EQ( 0u, noEchoKeyword.values.size() );
|
||||
@ -233,4 +236,8 @@ TEST( RifEclipseTextFileReader, KeywordsWithoutValue )
|
||||
|
||||
EXPECT_FLOAT_EQ( 1.0f, swatKeyword.values[0] );
|
||||
EXPECT_FLOAT_EQ( 6.0f, soilKeyword.values[0] );
|
||||
|
||||
auto g4Keyword = keywordDataItems[3];
|
||||
EXPECT_EQ( 4u, g4Keyword.values.size() );
|
||||
EXPECT_FLOAT_EQ( 0.123f, g4Keyword.values[3] );
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user