diff --git a/ApplicationLibCode/FileInterface/RifCsvUserDataParser.cpp b/ApplicationLibCode/FileInterface/RifCsvUserDataParser.cpp index 3e57bfab78..7df4c7624b 100644 --- a/ApplicationLibCode/FileInterface/RifCsvUserDataParser.cpp +++ b/ApplicationLibCode/FileInterface/RifCsvUserDataParser.cpp @@ -85,10 +85,12 @@ RifCsvUserDataParser::~RifCsvUserDataParser() //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -bool RifCsvUserDataParser::parse( const AsciiDataParseOptions& parseOptions, const std::map>& unitMapping ) +bool RifCsvUserDataParser::parse( const AsciiDataParseOptions& parseOptions, + const std::map& nameMapping, + const std::map>& unitMapping ) { if ( determineCsvLayout() == LineBased ) return parseLineBasedData(); - return parseColumnBasedData( parseOptions, unitMapping ); + return parseColumnBasedData( parseOptions, nameMapping, unitMapping ); } //-------------------------------------------------------------------------------------------------- @@ -305,6 +307,7 @@ RifCsvUserDataParser::CsvLayout RifCsvUserDataParser::determineCsvLayout() bool RifCsvUserDataParser::parseColumnInfo( QTextStream* dataStream, const AsciiDataParseOptions& parseOptions, std::vector* columnInfoList, + const std::map& nameMapping, const std::map>& unitMapping ) { bool headerFound = false; @@ -396,6 +399,11 @@ bool RifCsvUserDataParser::parseColumnInfo( QTextStream* colName = RiaTextStringTools::trimAndRemoveDoubleSpaces( colName.remove( fullCapture ) ); } + if ( auto it = nameMapping.find( colName ); it != nameMapping.end() ) + { + colName = it->second; + } + if ( iCol < names.size() ) { QString name = RiaTextStringTools::trimAndRemoveDoubleSpaces( names[iCol] ); @@ -440,6 +448,7 @@ bool RifCsvUserDataParser::parseColumnInfo( QTextStream* /// //-------------------------------------------------------------------------------------------------- bool RifCsvUserDataParser::parseColumnBasedData( const AsciiDataParseOptions& parseOptions, + const std::map& nameMapping, const std::map>& unitMapping ) { bool errors = false; @@ -454,7 +463,7 @@ bool RifCsvUserDataParser::parseColumnBasedData( const AsciiDataParseOptions& QTextStream* dataStream = openDataStream(); // Parse header - if ( !parseColumnInfo( dataStream, parseOptions, &columnInfoList, unitMapping ) ) + if ( !parseColumnInfo( dataStream, parseOptions, &columnInfoList, nameMapping, unitMapping ) ) { if ( m_errorText ) m_errorText->append( "CSV import: Failed to parse header columns" ); return false; diff --git a/ApplicationLibCode/FileInterface/RifCsvUserDataParser.h b/ApplicationLibCode/FileInterface/RifCsvUserDataParser.h index 0d380cf7df..27f49ded93 100644 --- a/ApplicationLibCode/FileInterface/RifCsvUserDataParser.h +++ b/ApplicationLibCode/FileInterface/RifCsvUserDataParser.h @@ -50,7 +50,9 @@ public: RifCsvUserDataParser( QString* errorText = nullptr ); virtual ~RifCsvUserDataParser(); - bool parse( const AsciiDataParseOptions& parseOptions, const std::map>& unitMapping = {} ); + bool parse( const AsciiDataParseOptions& parseOptions, + const std::map& nameMapping = {}, + const std::map>& unitMapping = {} ); const TableData& tableData() const; const Column* columnInfo( size_t columnIndex ) const; @@ -77,8 +79,10 @@ private: bool parseColumnInfo( QTextStream* dataStream, const AsciiDataParseOptions& parseOptions, std::vector* columnInfoList, + const std::map& nameMapping = {}, const std::map>& unitMapping = {} ); bool parseColumnBasedData( const AsciiDataParseOptions& parseOptions, + const std::map& nameMapping = {}, const std::map>& unitMapping = {} ); bool parseLineBasedData(); static QDateTime tryParseDateTime( const std::string& colData, const QString& format ); diff --git a/ApplicationLibCode/FileInterface/RifRevealCsvSectionSummaryReader.cpp b/ApplicationLibCode/FileInterface/RifRevealCsvSectionSummaryReader.cpp index aa8fffc34f..1b41b8a234 100644 --- a/ApplicationLibCode/FileInterface/RifRevealCsvSectionSummaryReader.cpp +++ b/ApplicationLibCode/FileInterface/RifRevealCsvSectionSummaryReader.cpp @@ -23,6 +23,7 @@ #include "RiaQDateTimeTools.h" #include "RifCsvUserDataParser.h" +#include "RifEclipseSummaryAddress.h" #include "RifEclipseUserDataKeywordTools.h" #include "RifEclipseUserDataParserTools.h" @@ -79,7 +80,21 @@ bool RifRevealCsvSectionSummaryReader::parse( const QString& text, RifEclipseSum { "1000Sm3/d", { "SM3/DAY", 1000.0 } }, { "MSm3", { "SM3", 1000000.0 } } }; - if ( !m_parser->parse( parseOptions, unitMapping ) ) + QString prefix = defaultCategory == RifEclipseSummaryAddress::SummaryVarCategory::SUMMARY_FIELD ? "F" : "W"; + + std::map nameMapping = { { "WaterCut", prefix + "WCT" }, { "GOR", prefix + "GOR" }, + { "BottomHolePressure", prefix + "BHP" }, { "CumLiquidInjected", prefix + "LIT" }, + { "CumWaterInjected", prefix + "WIT" }, { "CumGasInjected", prefix + "GIT" }, + { "CumOilInjected", prefix + "OIT" }, { "CumLiquidProduced", prefix + "LPT" }, + { "CumWaterProduced", prefix + "WPT" }, { "CumGasProduced", prefix + "GPT" }, + { "CumOilProduced", prefix + "OPT" }, { "LiquidProduced", prefix + "LPR" }, + { "WaterProduced", prefix + "WPR" }, { "GasProduced", prefix + "GPR" }, + { "OilProduced", prefix + "OPR" }, { "LiquidInjected", prefix + "LIR" }, + { "WaterInjected", prefix + "WIR" }, { "GasInjected", prefix + "GIR" }, + { "OilInjected", prefix + "OIR" }, { "WaterGasRatio", prefix + "WGR" }, + { "GasLiftRate", prefix + "GLIR" } }; + + if ( !m_parser->parse( parseOptions, nameMapping, unitMapping ) ) { RiaLogging::error( QString( "Failed to parse file" ) ); return false;