mirror of
https://github.com/OPM/ResInsight.git
synced 2025-02-25 18:55:39 -06:00
#6043 Elastic Properties Reader: auto-detect csv cell separator.
This commit is contained in:
parent
eaea8b6134
commit
4f5bf4f606
@ -23,6 +23,7 @@
|
|||||||
#include "RimElasticProperties.h"
|
#include "RimElasticProperties.h"
|
||||||
#include "RimFractureModel.h"
|
#include "RimFractureModel.h"
|
||||||
|
|
||||||
|
#include "RifCsvUserDataParser.h"
|
||||||
#include "RifElasticPropertiesReader.h"
|
#include "RifElasticPropertiesReader.h"
|
||||||
#include "RifFileParseTools.h"
|
#include "RifFileParseTools.h"
|
||||||
|
|
||||||
@ -37,6 +38,9 @@
|
|||||||
void RicElasticPropertiesImportTools::importElasticPropertiesFromFile( const QString& filePath,
|
void RicElasticPropertiesImportTools::importElasticPropertiesFromFile( const QString& filePath,
|
||||||
RimFractureModel* fractureModel )
|
RimFractureModel* fractureModel )
|
||||||
{
|
{
|
||||||
|
RifCsvUserDataFileParser csvParser( filePath );
|
||||||
|
QString separator = csvParser.tryDetermineCellSeparator();
|
||||||
|
|
||||||
typedef std::tuple<QString, QString, QString> FaciesKey;
|
typedef std::tuple<QString, QString, QString> FaciesKey;
|
||||||
|
|
||||||
// Read the facies properties from file
|
// Read the facies properties from file
|
||||||
@ -45,7 +49,7 @@ void RicElasticPropertiesImportTools::importElasticPropertiesFromFile( const QSt
|
|||||||
{
|
{
|
||||||
QStringList filePaths;
|
QStringList filePaths;
|
||||||
filePaths << filePath;
|
filePaths << filePath;
|
||||||
RifElasticPropertiesReader::readElasticProperties( rifElasticProperties, filePaths );
|
RifElasticPropertiesReader::readElasticProperties( rifElasticProperties, filePaths, separator );
|
||||||
}
|
}
|
||||||
catch ( FileParseException& exception )
|
catch ( FileParseException& exception )
|
||||||
{
|
{
|
||||||
|
@ -27,13 +27,14 @@
|
|||||||
///
|
///
|
||||||
//==================================================================================================
|
//==================================================================================================
|
||||||
void RifElasticPropertiesReader::readElasticProperties( std::vector<RifElasticProperties>& elasticProperties,
|
void RifElasticPropertiesReader::readElasticProperties( std::vector<RifElasticProperties>& elasticProperties,
|
||||||
const QStringList& filePaths )
|
const QStringList& filePaths,
|
||||||
|
const QString& separator )
|
||||||
{
|
{
|
||||||
for ( const QString& filePath : filePaths )
|
for ( const QString& filePath : filePaths )
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
readElasticProperties( elasticProperties, filePath );
|
readElasticProperties( elasticProperties, filePath, separator );
|
||||||
}
|
}
|
||||||
catch ( FileParseException& )
|
catch ( FileParseException& )
|
||||||
{
|
{
|
||||||
@ -48,7 +49,8 @@ void RifElasticPropertiesReader::readElasticProperties( std::vector<RifElasticPr
|
|||||||
///
|
///
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
void RifElasticPropertiesReader::readElasticProperties( std::vector<RifElasticProperties>& elasticProperties,
|
void RifElasticPropertiesReader::readElasticProperties( std::vector<RifElasticProperties>& elasticProperties,
|
||||||
const QString& filePath )
|
const QString& filePath,
|
||||||
|
const QString& separator )
|
||||||
{
|
{
|
||||||
QFile file( filePath );
|
QFile file( filePath );
|
||||||
if ( !file.open( QIODevice::ReadOnly | QIODevice::Text ) )
|
if ( !file.open( QIODevice::ReadOnly | QIODevice::Text ) )
|
||||||
@ -63,7 +65,7 @@ void RifElasticPropertiesReader::readElasticProperties( std::vector<RifElasticPr
|
|||||||
QString line = in.readLine();
|
QString line = in.readLine();
|
||||||
if ( !isEmptyLine( line ) && !isCommentLine( line ) )
|
if ( !isEmptyLine( line ) && !isCommentLine( line ) )
|
||||||
{
|
{
|
||||||
RifElasticProperties faciesProp = parseElasticProperties( line, lineNumber, filePath );
|
RifElasticProperties faciesProp = parseElasticProperties( line, lineNumber, filePath, separator );
|
||||||
elasticProperties.push_back( faciesProp );
|
elasticProperties.push_back( faciesProp );
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -74,10 +76,12 @@ void RifElasticPropertiesReader::readElasticProperties( std::vector<RifElasticPr
|
|||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
///
|
///
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
RifElasticProperties
|
RifElasticProperties RifElasticPropertiesReader::parseElasticProperties( const QString& line,
|
||||||
RifElasticPropertiesReader::parseElasticProperties( const QString& line, int lineNumber, const QString& filePath )
|
int lineNumber,
|
||||||
|
const QString& filePath,
|
||||||
|
const QString& separator )
|
||||||
{
|
{
|
||||||
QStringList tokens = tokenize( line, "," );
|
QStringList tokens = tokenize( line, separator );
|
||||||
|
|
||||||
// Plus one to allow trailing separator
|
// Plus one to allow trailing separator
|
||||||
const int expectedTokens = 13;
|
const int expectedTokens = 13;
|
||||||
|
@ -45,16 +45,21 @@ struct RifElasticProperties
|
|||||||
class RifElasticPropertiesReader
|
class RifElasticPropertiesReader
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
static void readElasticProperties( std::vector<RifElasticProperties>& elasticProperties, const QStringList& filePaths );
|
static void readElasticProperties( std::vector<RifElasticProperties>& elasticProperties,
|
||||||
|
const QStringList& filePaths,
|
||||||
|
const QString& separator = "," );
|
||||||
|
|
||||||
private:
|
private:
|
||||||
static void readElasticProperties( std::vector<RifElasticProperties>& elasticProperties, const QString& filePath );
|
static void readElasticProperties( std::vector<RifElasticProperties>& elasticProperties,
|
||||||
static RifElasticProperties parseElasticProperties( const QString& line, int lineNumber, const QString& filePath );
|
const QString& filePath,
|
||||||
static QStringList tokenize( const QString& line, const QString& separator );
|
const QString& separator );
|
||||||
static void verifyNonEmptyTokens( const QStringList& tokens,
|
static RifElasticProperties
|
||||||
const QStringList& nameOfNonEmptyTokens,
|
parseElasticProperties( const QString& line, int lineNumber, const QString& filePath, const QString& separator );
|
||||||
int lineNumber,
|
static QStringList tokenize( const QString& line, const QString& separator );
|
||||||
const QString& filePath );
|
static void verifyNonEmptyTokens( const QStringList& tokens,
|
||||||
|
const QStringList& nameOfNonEmptyTokens,
|
||||||
|
int lineNumber,
|
||||||
|
const QString& filePath );
|
||||||
|
|
||||||
static double parseDouble( const QString& token, const QString& propertyName, int lineNumber, const QString& filePath );
|
static double parseDouble( const QString& token, const QString& propertyName, int lineNumber, const QString& filePath );
|
||||||
|
|
||||||
|
@ -100,6 +100,29 @@ TEST( RifElasticPropertiesReaderTest, ReadCorrectInputFileWithTrailingSeparator
|
|||||||
ASSERT_EQ( 2u, elasticProperties.size() );
|
ASSERT_EQ( 2u, elasticProperties.size() );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
///
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
TEST( RifElasticPropertiesReaderTest, ReadCorrectInputFileWithCustomSeparator )
|
||||||
|
{
|
||||||
|
QTemporaryFile file;
|
||||||
|
EXPECT_TRUE( file.open() );
|
||||||
|
|
||||||
|
{
|
||||||
|
QTextStream out( &file );
|
||||||
|
out << "Norne;Not;Sand;0.00;25;0.25;2000;0.2;0.3;0.4;0.5;0.6;0.4;\n"
|
||||||
|
<< "Norne;Not;Sand;0.10;19;0.27;2099;0.3;0.4;0.5;0.2;0.5;0.55;\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
QStringList filePaths;
|
||||||
|
filePaths.append( file.fileName() );
|
||||||
|
|
||||||
|
std::vector<RifElasticProperties> elasticProperties;
|
||||||
|
RifElasticPropertiesReader::readElasticProperties( elasticProperties, filePaths, ";" );
|
||||||
|
|
||||||
|
ASSERT_EQ( 2u, elasticProperties.size() );
|
||||||
|
}
|
||||||
|
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
/// Helper to check exception messages when reading invalid files
|
/// Helper to check exception messages when reading invalid files
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
Loading…
Reference in New Issue
Block a user