#5434 Ensemble Parameters : Improve robustness

Avoid throwing when errors are detected
This commit is contained in:
Magne Sjaastad
2020-01-30 13:27:49 +01:00
parent 96fd4a1c9f
commit 7de8b6bb08
4 changed files with 51 additions and 75 deletions

View File

@@ -28,12 +28,6 @@
#include <functional>
//--------------------------------------------------------------------------------------------------
/// Constants
//--------------------------------------------------------------------------------------------------
#define PARAMETERS_FILE_NAME "parameters.txt"
#define RUNSPEC_FILE_NAME "runspecification.xml"
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
@@ -67,11 +61,11 @@ std::shared_ptr<RifCaseRealizationReader> RifCaseRealizationReader::createReader
{
std::shared_ptr<RifCaseRealizationReader> reader;
if ( fileName.endsWith( PARAMETERS_FILE_NAME ) )
if ( fileName.endsWith( parametersFileName() ) )
{
reader.reset( new RifCaseRealizationParametersReader( fileName ) );
}
else if ( fileName.endsWith( RUNSPEC_FILE_NAME ) )
else if ( fileName.endsWith( runSpecificationFileName() ) )
{
reader.reset( new RifCaseRealizationRunspecificationReader( fileName ) );
}
@@ -108,6 +102,22 @@ void RifCaseRealizationReader::closeFile()
}
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
QString RifCaseRealizationReader::parametersFileName()
{
return "parameters.txt";
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
QString RifCaseRealizationReader::runSpecificationFileName()
{
return "runspecification.xml";
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
@@ -136,6 +146,8 @@ void RifCaseRealizationParametersReader::parse()
int lineNo = 0;
QTextStream* dataStream = openDataStream();
QStringList errors;
try
{
while ( !dataStream->atEnd() )
@@ -147,34 +159,30 @@ void RifCaseRealizationParametersReader::parse()
if ( cols.size() != 2 )
{
throw FileParseException(
QString( "RifEnsembleParametersReader: Invalid file format in line %1" ).arg( lineNo ) );
errors << QString( "RifEnsembleParametersReader: Invalid file format in line %1" ).arg( lineNo );
continue;
}
QString& name = cols[0];
QString& strValue = cols[1];
if ( RiaStdStringTools::startsWithAlphabetic( strValue.toStdString() ) )
if ( RiaStdStringTools::isNumber( strValue.toStdString(), QLocale::c().decimalPoint().toLatin1() ) )
{
m_parameters->addParameter( name, strValue );
bool parseOk = true;
double value = QLocale::c().toDouble( strValue, &parseOk );
if ( parseOk )
{
m_parameters->addParameter( name, value );
}
else
{
errors << QString( "RifEnsembleParametersReader: Invalid number format in line %1" ).arg( lineNo );
}
}
else
{
if ( !RiaStdStringTools::isNumber( strValue.toStdString(), QLocale::c().decimalPoint().toLatin1() ) )
{
throw FileParseException(
QString( "RifEnsembleParametersReader: Invalid number format in line %1" ).arg( lineNo ) );
}
bool parseOk = true;
double value = QLocale::c().toDouble( strValue, &parseOk );
if ( !parseOk )
{
throw FileParseException(
QString( "RifEnsembleParametersReader: Invalid number format in line %1" ).arg( lineNo ) );
}
m_parameters->addParameter( name, value );
m_parameters->addParameter( name, strValue );
}
}
@@ -185,6 +193,11 @@ void RifCaseRealizationParametersReader::parse()
closeDataStream();
throw;
}
for ( const auto& s : errors )
{
RiaLogging::warning( s );
}
}
//--------------------------------------------------------------------------------------------------
@@ -316,8 +329,8 @@ QString RifCaseRealizationParametersFileLocator::locate( const QString& modelPat
QStringList files = qdir.entryList( QDir::Files | QDir::NoDotAndDotDot );
for ( const QString& file : files )
{
if ( QString::compare( file, PARAMETERS_FILE_NAME, Qt::CaseInsensitive ) == 0 ||
QString::compare( file, RUNSPEC_FILE_NAME, Qt::CaseInsensitive ) == 0 )
if ( QString::compare( file, RifCaseRealizationReader::parametersFileName(), Qt::CaseInsensitive ) == 0 ||
QString::compare( file, RifCaseRealizationReader::runSpecificationFileName(), Qt::CaseInsensitive ) == 0 )
{
return qdir.absoluteFilePath( file );
}

View File

@@ -52,6 +52,9 @@ public:
static std::shared_ptr<RifCaseRealizationReader> createReaderFromFileName( const QString& fileName );
static QString parametersFileName();
static QString runSpecificationFileName();
protected:
QFile* openFile();
void closeFile();