mirror of
https://github.com/OPM/ResInsight.git
synced 2026-08-27 05:37:21 -05:00
Use std string for improved performance
Avoid regexp and use optimized string operations for better performance
This commit is contained in:
@@ -116,39 +116,39 @@ void RifCaseRealizationParametersReader::parse()
|
||||
int lineNo = 0;
|
||||
QStringList errors;
|
||||
|
||||
const auto decimalPoint = RiaStdStringTools::decimalPoint();
|
||||
|
||||
while ( !dataStream.atEnd() )
|
||||
{
|
||||
QString line = dataStream.readLine();
|
||||
|
||||
lineNo++;
|
||||
QStringList cols = RifFileParseTools::splitLineAndTrim( line, QRegularExpression( "[ \t]" ), true );
|
||||
|
||||
if ( cols.size() != 2 )
|
||||
const auto stdLine = line.toStdString();
|
||||
const auto trimmedLine = RiaStdStringTools::trimString( stdLine );
|
||||
const auto [name, parameterValue] = RiaStdStringTools::splitAtWhitespace( trimmedLine );
|
||||
|
||||
if ( name.empty() || parameterValue.empty() )
|
||||
{
|
||||
errors << QString( "RifEnsembleParametersReader: Invalid file format in line %1" ).arg( lineNo );
|
||||
|
||||
errors << QString( "RifCaseRealizationParametersReader: Invalid file format in line %1" ).arg( lineNo );
|
||||
continue;
|
||||
}
|
||||
|
||||
QString& name = cols[0];
|
||||
QString& strValue = cols[1];
|
||||
|
||||
if ( RiaTextStringTools::isNumber( strValue, QLocale::c().decimalPoint() ) )
|
||||
if ( RiaStdStringTools::isNumber( parameterValue, decimalPoint ) )
|
||||
{
|
||||
bool parseOk = true;
|
||||
double value = QLocale::c().toDouble( strValue, &parseOk );
|
||||
if ( parseOk )
|
||||
double doubleValue = 0.0;
|
||||
if ( RiaStdStringTools::toDouble( parameterValue, doubleValue ) )
|
||||
{
|
||||
m_parameters->addParameter( name, value );
|
||||
m_parameters->addParameter( QString::fromStdString( std::string( name ) ), doubleValue );
|
||||
}
|
||||
else
|
||||
{
|
||||
errors << QString( "RifEnsembleParametersReader: Invalid number format in line %1" ).arg( lineNo );
|
||||
errors << QString( "RifCaseRealizationParametersReader: Invalid number format in line %1" ).arg( lineNo );
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
m_parameters->addParameter( name, strValue );
|
||||
m_parameters->addParameter( QString::fromStdString( std::string( name ) ), QString::fromStdString( std::string( parameterValue ) ) );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -10,6 +10,38 @@
|
||||
|
||||
static const QString CASE_REAL_TEST_DATA_DIRECTORY_01 = QString( "%1/RifCaseRealizationParametersReader/" ).arg( TEST_DATA_DIR );
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
TEST( RifCaseRealizationParametersReaderTest, MixOfTabAndWhiteSpace )
|
||||
{
|
||||
RifCaseRealizationParametersReader reader( CASE_REAL_TEST_DATA_DIRECTORY_01 + "parameters-mix-tab-whitespace.txt" );
|
||||
|
||||
try
|
||||
{
|
||||
reader.parse();
|
||||
|
||||
const std::shared_ptr<RigCaseRealizationParameters> parameters( reader.parameters() );
|
||||
std::map<QString, RigCaseRealizationParameters::Value> params = parameters->parameters();
|
||||
|
||||
std::vector<std::pair<QString, double>> expectedValues = { { "LETSWOF:L_1OW", 1.83555 },
|
||||
{ "LETSWOF:E_1OW", 5.84645 },
|
||||
{ "LETSWOF:T_1OW", 1.46894 },
|
||||
{ "LETSWOF:L_1WO", 4.9974 },
|
||||
{ "LETSWOF:E_1WO", 3.38433e-05 } };
|
||||
|
||||
for ( const auto& expected : expectedValues )
|
||||
{
|
||||
EXPECT_EQ( expected.second, params[expected.first].numericValue() )
|
||||
<< "Parameter value mismatch for: " << expected.first.toStdString();
|
||||
}
|
||||
}
|
||||
catch ( ... )
|
||||
{
|
||||
EXPECT_TRUE( false );
|
||||
}
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
|
||||
+30
@@ -0,0 +1,30 @@
|
||||
LETSWOF:L_1OW 1.83555
|
||||
LETSWOF:E_1OW 5.84645
|
||||
LETSWOF:T_1OW 1.46894
|
||||
LETSWOF:L_1WO 4.9974
|
||||
LETSWOF:E_1WO 3.38433e-05
|
||||
LETSWOF:T_1WO 0.762342
|
||||
LETSWOF:SORW1 0.13
|
||||
LETSWOF:KRW1 0.778509
|
||||
MULTFLT:MULTFLT_F1 0.678647
|
||||
LOG10_MULTFLT:MULTFLT_F1 -0.168356
|
||||
MULTFLT:MULTFLT_F2 0.0051102
|
||||
LOG10_MULTFLT:MULTFLT_F2 -2.29156
|
||||
MULTFLT:MULTFLT_F3 0.347461
|
||||
LOG10_MULTFLT:MULTFLT_F3 -0.459093
|
||||
MULTFLT:MULTFLT_F4 0.113
|
||||
LOG10_MULTFLT:MULTFLT_F4 -0.946922
|
||||
MULTFLT:MULTFLT_F5 0.521999
|
||||
LOG10_MULTFLT:MULTFLT_F5 -0.28233
|
||||
RMSGLOBPARAMS:FWL 1708.62
|
||||
MULTZ:MULTZ_MIDREEK 3.38433e-05
|
||||
LOG10_MULTZ:MULTZ_MIDREEK -4.47053
|
||||
LETSGOF:L_1GO 2.04966
|
||||
LETSGOF:E_1GO 1.85285
|
||||
LETSGOF:T_1GO 1.39467
|
||||
LETSGOF:L_1OG 3.90509
|
||||
LETSGOF:E_1OG 4.00383
|
||||
LETSGOF:T_1OG 1.03539
|
||||
LETSGOF:SORG1 0.34
|
||||
TST:TEXT_PARAM YES
|
||||
LETSGOF:KRG1 0.97
|
||||
Reference in New Issue
Block a user