diff --git a/ApplicationLibCode/Commands/SummaryPlotCommands/RicPasteAsciiDataToSummaryPlotFeature.cpp b/ApplicationLibCode/Commands/SummaryPlotCommands/RicPasteAsciiDataToSummaryPlotFeature.cpp index 5bf1b003d2..de16524ad6 100644 --- a/ApplicationLibCode/Commands/SummaryPlotCommands/RicPasteAsciiDataToSummaryPlotFeature.cpp +++ b/ApplicationLibCode/Commands/SummaryPlotCommands/RicPasteAsciiDataToSummaryPlotFeature.cpp @@ -156,8 +156,10 @@ std::vector RicPasteAsciiDataToSummaryPlotFeature::parseCurv const RifAsciiDataParseOptions& parseOptions = settings.parseOptions(); RifCsvUserDataPastedTextParser parser = RifCsvUserDataPastedTextParser( data ); - if ( !parser.parse( parseOptions ) ) + auto parseResult = parser.parse( parseOptions ); + if ( !parseResult ) { + RiaLogging::error( QString( "Failed to parse pasted data: " ) + parseResult.error() ); return curves; } diff --git a/ApplicationLibCode/FileInterface/RifCsvUserData.cpp b/ApplicationLibCode/FileInterface/RifCsvUserData.cpp index 905918368b..8f3f667755 100644 --- a/ApplicationLibCode/FileInterface/RifCsvUserData.cpp +++ b/ApplicationLibCode/FileInterface/RifCsvUserData.cpp @@ -55,10 +55,13 @@ bool RifCsvUserData::parse( const QString& fileName, const RifAsciiDataParseOpti m_allResultAddresses.clear(); m_mapFromAddressToResultIndex.clear(); - m_parser = std::make_unique( fileName, errorText ); - if ( !m_parser->parse( parseOptions ) ) + m_parser = std::make_unique( fileName ); + auto parseResult = m_parser->parse( parseOptions ); + if ( !parseResult ) { - RiaLogging::error( QString( "Failed to parse file" ) ); + QString errorMsg = QString( "Failed to parse file: " ) + parseResult.error(); + RiaLogging::error( errorMsg ); + if ( errorText ) *errorText = parseResult.error(); return false; } diff --git a/ApplicationLibCode/FileInterface/RifCsvUserDataParser.cpp b/ApplicationLibCode/FileInterface/RifCsvUserDataParser.cpp index 8f2250ffd3..20fd075fde 100644 --- a/ApplicationLibCode/FileInterface/RifCsvUserDataParser.cpp +++ b/ApplicationLibCode/FileInterface/RifCsvUserDataParser.cpp @@ -69,8 +69,7 @@ const std::vector CSV_LINE_BASED_COL_NAMES = { "DATE", "VECTOR", "VALUE //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -RifCsvUserDataParser::RifCsvUserDataParser( QString* errorText ) - : m_errorText( errorText ) +RifCsvUserDataParser::RifCsvUserDataParser() { } @@ -84,12 +83,14 @@ RifCsvUserDataParser::~RifCsvUserDataParser() //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -bool RifCsvUserDataParser::parse( const RifAsciiDataParseOptions& parseOptions, - const std::map& nameMapping, - const std::map>& unitMapping ) +std::expected RifCsvUserDataParser::parse( const RifAsciiDataParseOptions& parseOptions, + const std::map& nameMapping, + const std::map>& unitMapping ) { - if ( determineCsvLayout() == LineBased ) return parseLineBasedData( parseOptions ); - return parseColumnBasedData( parseOptions, nameMapping, unitMapping ); + if ( determineCsvLayout() == LineBased ) + return parseLineBasedData( parseOptions ); + else + return parseColumnBasedData( parseOptions, nameMapping, unitMapping ); } //-------------------------------------------------------------------------------------------------- @@ -155,14 +156,14 @@ bool RifCsvUserDataParser::parseColumnInfo( const RifAsciiDataParseOptions& pars { QTextStream* dataStream = openDataStream(); std::vector columnInfoList; - bool result = parseColumnInfo( dataStream, parseOptions, &columnInfoList ); + auto result = parseColumnInfo( dataStream, parseOptions, &columnInfoList ); if ( result ) { m_tableData = TableData( "", "", columnInfoList ); } closeDataStream(); - return result; + return result.has_value(); } //-------------------------------------------------------------------------------------------------- @@ -305,15 +306,15 @@ RifCsvUserDataParser::CsvLayout RifCsvUserDataParser::determineCsvLayout() //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -bool RifCsvUserDataParser::parseColumnInfo( QTextStream* dataStream, - const RifAsciiDataParseOptions& parseOptions, - std::vector* columnInfoList, - const std::map& nameMapping, - const std::map>& unitMapping ) +std::expected RifCsvUserDataParser::parseColumnInfo( QTextStream* dataStream, + const RifAsciiDataParseOptions& parseOptions, + std::vector* columnInfoList, + const std::map& nameMapping, + const std::map>& unitMapping ) { bool headerFound = false; - if ( !columnInfoList ) return false; + if ( !columnInfoList ) return std::unexpected( QString( "Column info list is null" ) ); columnInfoList->clear(); while ( !headerFound && dataStream->status() == QTextStream::Status::Ok ) @@ -324,7 +325,7 @@ bool RifCsvUserDataParser::parseColumnInfo( QTextStream* if ( !headerFound && dataStream->atEnd() ) { // Handle empty stream - return false; + return std::unexpected( QString( "Empty data stream" ) ); } else { @@ -460,17 +461,16 @@ bool RifCsvUserDataParser::parseColumnInfo( QTextStream* headerFound = true; } - return true; + return {}; } //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -bool RifCsvUserDataParser::parseColumnBasedData( const RifAsciiDataParseOptions& parseOptions, - const std::map& nameMapping, - const std::map>& unitMapping ) +std::expected RifCsvUserDataParser::parseColumnBasedData( const RifAsciiDataParseOptions& parseOptions, + const std::map& nameMapping, + const std::map>& unitMapping ) { - bool errors = false; enum { FIRST_DATA_ROW, @@ -482,14 +482,14 @@ bool RifCsvUserDataParser::parseColumnBasedData( const RifAsciiDataParseOptions& QTextStream* dataStream = openDataStream(); // Parse header - if ( !parseColumnInfo( dataStream, parseOptions, &columnInfoList, nameMapping, unitMapping ) ) + auto headerResult = parseColumnInfo( dataStream, parseOptions, &columnInfoList, nameMapping, unitMapping ); + if ( !headerResult ) { - if ( m_errorText ) m_errorText->append( "CSV import: Failed to parse header columns" ); - return false; + return std::unexpected( QString( "CSV import: Failed to parse header columns - " ) + headerResult.error() ); } colCount = (int)columnInfoList.size(); - while ( !dataStream->atEnd() && !errors ) + while ( !dataStream->atEnd() ) { QString line = dataStream->readLine(); if ( line.trimmed().isEmpty() ) continue; @@ -498,9 +498,8 @@ bool RifCsvUserDataParser::parseColumnBasedData( const RifAsciiDataParseOptions& if ( lineColumns.size() != colCount ) { - if ( m_errorText ) m_errorText->append( "CSV import: Varying number of columns" ); - errors = true; - break; + closeDataStream(); + return std::unexpected( QString( "CSV import: Varying number of columns" ) ); } else if ( parseState == FIRST_DATA_ROW ) { @@ -541,66 +540,59 @@ bool RifCsvUserDataParser::parseColumnBasedData( const RifAsciiDataParseOptions& QString& colData = lineColumns[iCol]; Column& col = columnInfoList[iCol]; - try + if ( col.dataType == Column::NUMERIC ) { - if ( col.dataType == Column::NUMERIC ) + bool parseOk = true; + double value = parseOptions.locale.toDouble( colData, &parseOk ); + + if ( !parseOk ) { - bool parseOk = true; - double value = parseOptions.locale.toDouble( colData, &parseOk ); - - if ( !parseOk ) + // Find the error reason, wrong decimal sign or something else + if ( RiaStdStringTools::isNumber( colData.toStdString(), '.' ) || + RiaStdStringTools::isNumber( colData.toStdString(), ',' ) ) { - // Find the error reason, wrong decimal sign or something else - if ( RiaStdStringTools::isNumber( colData.toStdString(), '.' ) || - RiaStdStringTools::isNumber( colData.toStdString(), ',' ) ) - { - if ( m_errorText ) - m_errorText->append( - QString( "CSV import: Failed to parse numeric value in column %1\n" ).arg( QString::number( iCol + 1 ) ) ); - throw 0; - } - - // Add nullptr value - value = HUGE_VAL; + QString errorMsg = + QString( "CSV import: Failed to parse numeric value in column %1" ).arg( QString::number( iCol + 1 ) ); + closeDataStream(); + return std::unexpected( errorMsg ); } - col.values.push_back( value * col.scaleFactor ); - } - else if ( col.dataType == Column::TEXT ) - { - col.textValues.push_back( colData.toStdString() ); - } - else if ( col.dataType == Column::DATETIME ) - { - QDateTime dt = tryParseDateTime( colData.toStdString(), parseOptions.dateTimeFormat ); - - // Try to match date format only - if ( !dt.isValid() && parseOptions.dateFormat != parseOptions.dateTimeFormat ) - { - dt = tryParseDateTime( colData.toStdString(), parseOptions.dateFormat ); - } - if ( !dt.isValid() && !parseOptions.fallbackDateTimeFormat.isEmpty() ) - { - dt = tryParseDateTime( colData.toStdString(), parseOptions.fallbackDateTimeFormat ); - } - - if ( !dt.isValid() && parseOptions.startDateTime.isValid() ) - { - double minutes = colData.toDouble(); - dt = parseOptions.startDateTime.addSecs( minutes * 60 ); - } - - if ( !dt.isValid() ) - { - if ( m_errorText ) m_errorText->append( "CSV import: Failed to parse date time value" ); - throw 0; - } - col.dateTimeValues.push_back( dt.toSecsSinceEpoch() ); + + // Add nullptr value + value = HUGE_VAL; } + col.values.push_back( value * col.scaleFactor ); } - catch ( ... ) + else if ( col.dataType == Column::TEXT ) { - errors = true; - break; + col.textValues.push_back( colData.toStdString() ); + } + else if ( col.dataType == Column::DATETIME ) + { + QDateTime dt = tryParseDateTime( colData.toStdString(), parseOptions.dateTimeFormat ); + + // Try to match date format only + if ( !dt.isValid() && parseOptions.dateFormat != parseOptions.dateTimeFormat ) + { + dt = tryParseDateTime( colData.toStdString(), parseOptions.dateFormat ); + } + if ( !dt.isValid() && !parseOptions.fallbackDateTimeFormat.isEmpty() ) + { + dt = tryParseDateTime( colData.toStdString(), parseOptions.fallbackDateTimeFormat ); + } + + if ( !dt.isValid() && parseOptions.startDateTime.isValid() ) + { + double minutes = colData.toDouble(); + dt = parseOptions.startDateTime.addSecs( minutes * 60 ); + } + + if ( !dt.isValid() ) + { + QString errorMsg = "CSV import: Failed to parse date time value"; + closeDataStream(); + return std::unexpected( errorMsg ); + } + col.dateTimeValues.push_back( dt.toSecsSinceEpoch() ); } } } @@ -608,23 +600,20 @@ bool RifCsvUserDataParser::parseColumnBasedData( const RifAsciiDataParseOptions& closeDataStream(); - if ( !errors ) - { - TableData td( "", "", columnInfoList ); - m_tableData = td; - } - return !errors; + TableData td( "", "", columnInfoList ); + m_tableData = td; + return {}; } //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -bool RifCsvUserDataParser::parseLineBasedData( const RifAsciiDataParseOptions& parseOptions ) +std::expected RifCsvUserDataParser::parseLineBasedData( const RifAsciiDataParseOptions& parseOptions ) { QTextStream* dataStream = openDataStream(); if ( !dataStream ) { - return false; + return std::unexpected( QString( "Failed to open data stream" ) ); } std::map>> addressesAndData; @@ -684,62 +673,52 @@ bool RifCsvUserDataParser::parseLineBasedData( const RifAsciiDataParseOptions& p } } - try + // DATE + QDateTime dateTime; { - // DATE - QDateTime dateTime; + auto dateText = dataItems[colIndexes[(size_t)CsvLineBasedColumnType::DATE]].toStdString(); + + const auto formats = { parseOptions.dateFormat, QString( ISO_DATE_FORMAT ), QString( ISO_DATE_FORMAT ) + " " + TIME_FORMAT }; + for ( const auto& format : formats ) { - auto dateText = dataItems[colIndexes[(size_t)CsvLineBasedColumnType::DATE]].toStdString(); - - const auto formats = { parseOptions.dateFormat, QString( ISO_DATE_FORMAT ), QString( ISO_DATE_FORMAT ) + " " + TIME_FORMAT }; - for ( const auto& format : formats ) - { - dateTime = tryParseDateTime( dateText, format ); - if ( dateTime.isValid() ) break; - } - - if ( !dateTime.isValid() ) - { - if ( m_errorText ) - m_errorText->append( - QString( "CSV import: Failed to parse date time value in line %1" ).arg( QString::number( lineCount ) ) ); - throw 0; - } + dateTime = tryParseDateTime( dateText, format ); + if ( dateTime.isValid() ) break; } - // VALUE + if ( !dateTime.isValid() ) { - bool parseOk = true; - double value = QLocale::c().toDouble( dataItems[colIndexes[(size_t)CsvLineBasedColumnType::VALUE]], &parseOk ); - - if ( !parseOk ) - { - if ( m_errorText ) - m_errorText->append( - QString( "CSV import: Failed to parse numeric value in line %1\n" ).arg( QString::number( lineCount ) ) ); - throw 0; - } - - auto& samples = addressesAndData[addr]; - samples.push_back( std::make_pair( dateTime.toSecsSinceEpoch(), value ) ); - } - - // ERROR VALUE - if ( expectErrorValue ) - { - bool parseOk = true; - double value = QLocale::c().toDouble( dataItems[colIndexes[(size_t)CsvLineBasedColumnType::ERROR_VALUE]], &parseOk ); - - if ( !parseOk ) value = DOUBLE_INF; - - auto& samples = addressesAndData[errAddr]; - samples.push_back( std::make_pair( dateTime.toSecsSinceEpoch(), value ) ); + QString errorMsg = QString( "CSV import: Failed to parse date time value in line %1" ).arg( QString::number( lineCount ) ); + closeDataStream(); + return std::unexpected( errorMsg ); } } - catch ( ... ) + + // VALUE { - closeDataStream(); - return false; + bool parseOk = true; + double value = QLocale::c().toDouble( dataItems[colIndexes[(size_t)CsvLineBasedColumnType::VALUE]], &parseOk ); + + if ( !parseOk ) + { + QString errorMsg = QString( "CSV import: Failed to parse numeric value in line %1" ).arg( QString::number( lineCount ) ); + closeDataStream(); + return std::unexpected( errorMsg ); + } + + auto& samples = addressesAndData[addr]; + samples.push_back( std::make_pair( dateTime.toSecsSinceEpoch(), value ) ); + } + + // ERROR VALUE + if ( expectErrorValue ) + { + bool parseOk = true; + double value = QLocale::c().toDouble( dataItems[colIndexes[(size_t)CsvLineBasedColumnType::ERROR_VALUE]], &parseOk ); + + if ( !parseOk ) value = DOUBLE_INF; + + auto& samples = addressesAndData[errAddr]; + samples.push_back( std::make_pair( dateTime.toSecsSinceEpoch(), value ) ); } } } @@ -770,7 +749,7 @@ bool RifCsvUserDataParser::parseLineBasedData( const RifAsciiDataParseOptions& p m_tableData = td; } - return true; + return {}; } //-------------------------------------------------------------------------------------------------- @@ -885,8 +864,8 @@ QLocale RifCsvUserDataParser::localeFromDecimalSeparator( const QString& decimal //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -RifCsvUserDataFileParser::RifCsvUserDataFileParser( const QString& fileName, QString* errorText ) - : RifCsvUserDataParser( errorText ) +RifCsvUserDataFileParser::RifCsvUserDataFileParser( const QString& fileName ) + : RifCsvUserDataParser() { m_fileName = fileName; m_file = nullptr; @@ -965,8 +944,8 @@ void RifCsvUserDataFileParser::closeFile() //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -RifCsvUserDataPastedTextParser::RifCsvUserDataPastedTextParser( const QString& text, QString* errorText ) - : RifCsvUserDataParser( errorText ) +RifCsvUserDataPastedTextParser::RifCsvUserDataPastedTextParser( const QString& text ) + : RifCsvUserDataParser() { m_text = text; m_textStream = nullptr; diff --git a/ApplicationLibCode/FileInterface/RifCsvUserDataParser.h b/ApplicationLibCode/FileInterface/RifCsvUserDataParser.h index fdbdb84013..a50d83af08 100644 --- a/ApplicationLibCode/FileInterface/RifCsvUserDataParser.h +++ b/ApplicationLibCode/FileInterface/RifCsvUserDataParser.h @@ -28,6 +28,7 @@ #include #include +#include #include class Column; @@ -46,13 +47,13 @@ public: }; public: - RifCsvUserDataParser( QString* errorText = nullptr ); + RifCsvUserDataParser(); virtual ~RifCsvUserDataParser(); - bool parse( const RifAsciiDataParseOptions& parseOptions, - const std::map& nameMapping = {}, - const std::map>& unitMapping = {} ); - const TableData& tableData() const; + std::expected parse( const RifAsciiDataParseOptions& parseOptions, + const std::map& nameMapping = {}, + const std::map>& unitMapping = {} ); + const TableData& tableData() const; const Column* columnInfo( size_t columnIndex ) const; const Column* dateTimeColumn() const; @@ -75,20 +76,19 @@ protected: private: std::vector parseLineBasedHeader( QStringList headerCols ); - bool parseColumnInfo( QTextStream* dataStream, - const RifAsciiDataParseOptions& parseOptions, - std::vector* columnInfoList, - const std::map& nameMapping = {}, - const std::map>& unitMapping = {} ); - bool parseColumnBasedData( const RifAsciiDataParseOptions& parseOptions, - const std::map& nameMapping = {}, - const std::map>& unitMapping = {} ); - bool parseLineBasedData( const RifAsciiDataParseOptions& parseOptions ); - static QDateTime tryParseDateTime( const std::string& colData, const QString& format ); + std::expected parseColumnInfo( QTextStream* dataStream, + const RifAsciiDataParseOptions& parseOptions, + std::vector* columnInfoList, + const std::map& nameMapping = {}, + const std::map>& unitMapping = {} ); + std::expected parseColumnBasedData( const RifAsciiDataParseOptions& parseOptions, + const std::map& nameMapping = {}, + const std::map>& unitMapping = {} ); + std::expected parseLineBasedData( const RifAsciiDataParseOptions& parseOptions ); + static QDateTime tryParseDateTime( const std::string& colData, const QString& format ); private: TableData m_tableData; - QString* m_errorText; }; //================================================================================================== @@ -97,7 +97,7 @@ private: class RifCsvUserDataFileParser : public RifCsvUserDataParser { public: - RifCsvUserDataFileParser( const QString& fileName, QString* errorText = nullptr ); + RifCsvUserDataFileParser( const QString& fileName ); ~RifCsvUserDataFileParser() override; protected: @@ -121,7 +121,7 @@ private: class RifCsvUserDataPastedTextParser : public RifCsvUserDataParser { public: - RifCsvUserDataPastedTextParser( const QString& text, QString* errorText = nullptr ); + RifCsvUserDataPastedTextParser( const QString& text ); ~RifCsvUserDataPastedTextParser() override; protected: diff --git a/ApplicationLibCode/FileInterface/RifOsduWellPathReader.cpp b/ApplicationLibCode/FileInterface/RifOsduWellPathReader.cpp index 6b66a2d32f..df8ec4e98b 100644 --- a/ApplicationLibCode/FileInterface/RifOsduWellPathReader.cpp +++ b/ApplicationLibCode/FileInterface/RifOsduWellPathReader.cpp @@ -49,7 +49,7 @@ std::pair, QString> RifOsduWellPathReader::parseCsv( const QString& content ) { QString errorMessage; - RifCsvUserDataPastedTextParser parser( content, &errorMessage ); + RifCsvUserDataPastedTextParser parser( content ); RifAsciiDataParseOptions parseOptions; parseOptions.cellSeparator = ","; @@ -57,7 +57,8 @@ std::pair, QString> RifOsduWellPathReader::parseCsv( const std::vector>> readValues; - if ( parser.parse( parseOptions ) ) + auto parseResult = parser.parse( parseOptions ); + if ( parseResult ) { for ( auto s : parser.tableData().columnInfos() ) { diff --git a/ApplicationLibCode/FileInterface/RifPolygonReader.cpp b/ApplicationLibCode/FileInterface/RifPolygonReader.cpp index a5ed3905c7..841adddec7 100644 --- a/ApplicationLibCode/FileInterface/RifPolygonReader.cpp +++ b/ApplicationLibCode/FileInterface/RifPolygonReader.cpp @@ -131,7 +131,7 @@ std::vector> RifPolygonReader::parseText( const QString& //-------------------------------------------------------------------------------------------------- std::vector>> RifPolygonReader::parseTextCsv( const QString& content, QString* errorMessage ) { - RifCsvUserDataPastedTextParser parser( content, errorMessage ); + RifCsvUserDataPastedTextParser parser( content ); RifAsciiDataParseOptions parseOptions; parseOptions.cellSeparator = ","; @@ -139,7 +139,8 @@ std::vector>> RifPolygonReader::parseText std::vector>> readValues; - if ( parser.parse( parseOptions ) ) + auto parseResult = parser.parse( parseOptions ); + if ( parseResult ) { for ( auto s : parser.tableData().columnInfos() ) { diff --git a/ApplicationLibCode/FileInterface/RifRevealCsvSectionSummaryReader.cpp b/ApplicationLibCode/FileInterface/RifRevealCsvSectionSummaryReader.cpp index 810ecfb2a8..3bf89b847c 100644 --- a/ApplicationLibCode/FileInterface/RifRevealCsvSectionSummaryReader.cpp +++ b/ApplicationLibCode/FileInterface/RifRevealCsvSectionSummaryReader.cpp @@ -69,7 +69,7 @@ bool RifRevealCsvSectionSummaryReader::parse( const QString& parseOptions.timeSeriesColumnName = "Date"; parseOptions.defaultCategory = defaultCategory; - m_parser = std::make_unique( text, errorText ); + m_parser = std::make_unique( text ); std::map> unitMapping = { { "Sm3", { "SM3", 1.0 } }, { "Sm3/day", { "SM3/DAY", 1.0 } }, { "Sm3/day/bar", { "SM3/DAY/BAR", 1.0 } }, @@ -97,9 +97,10 @@ bool RifRevealCsvSectionSummaryReader::parse( const QString& { "OilInjected", prefix + "OIR" }, { "WaterGasRatio", prefix + "WGR" }, { "GasLiftRate", prefix + "GLIR" } }; - if ( !m_parser->parse( parseOptions, nameMapping, unitMapping ) ) + auto parseResult = m_parser->parse( parseOptions, nameMapping, unitMapping ); + if ( !parseResult ) { - RiaLogging::error( QString( "Failed to parse file" ) ); + RiaLogging::error( QString( "Failed to parse file: " ) + parseResult.error() ); return false; } diff --git a/ApplicationLibCode/FileInterface/RifStimPlanCsvSummaryReader.cpp b/ApplicationLibCode/FileInterface/RifStimPlanCsvSummaryReader.cpp index 474829495b..7c5ca83604 100644 --- a/ApplicationLibCode/FileInterface/RifStimPlanCsvSummaryReader.cpp +++ b/ApplicationLibCode/FileInterface/RifStimPlanCsvSummaryReader.cpp @@ -77,11 +77,14 @@ std::pair RifStimPlanCsvSummaryReader::parse( const QString& file parseOptions.timeSeriesColumnName = "Time"; parseOptions.startDateTime = startDateTime; - m_parser = std::make_unique( fileContents, errorText ); + m_parser = std::make_unique( fileContents ); - if ( !m_parser->parse( parseOptions ) ) + auto parseResult = m_parser->parse( parseOptions ); + if ( !parseResult ) { - RiaLogging::error( QString( "Failed to parse file" ) ); + QString errorMsg = QString( "Failed to parse file: " ) + parseResult.error(); + RiaLogging::error( errorMsg ); + if ( errorText ) *errorText = parseResult.error(); return std::make_pair( false, "" ); } diff --git a/ApplicationLibCode/ReservoirDataModel/Well/RigWellLogCsvFile.cpp b/ApplicationLibCode/ReservoirDataModel/Well/RigWellLogCsvFile.cpp index ed8efd6aee..be29154edb 100644 --- a/ApplicationLibCode/ReservoirDataModel/Well/RigWellLogCsvFile.cpp +++ b/ApplicationLibCode/ReservoirDataModel/Well/RigWellLogCsvFile.cpp @@ -61,7 +61,7 @@ bool RigWellLogCsvFile::open( const QString& fileName, RigWellPath* wellPath, QS double samplingInterval = 0.1; cvf::cref resampledWellPath = resampleWellPath( *wellPath, samplingInterval ); - RifCsvUserDataFileParser parser( fileName, errorMessage ); + RifCsvUserDataFileParser parser( fileName ); RifAsciiDataParseOptions parseOptions; parseOptions.useCustomDateTimeFormat = true;