diff --git a/ApplicationCode/FileInterface/RifCsvUserData.cpp b/ApplicationCode/FileInterface/RifCsvUserData.cpp index ca90a92609..4302af5ee7 100644 --- a/ApplicationCode/FileInterface/RifCsvUserData.cpp +++ b/ApplicationCode/FileInterface/RifCsvUserData.cpp @@ -51,7 +51,7 @@ RifCsvUserData::~RifCsvUserData() //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -bool RifCsvUserData::parse(const QString& data, const AsciiDataParseOptions& parseOptions, QString* errorText) +bool RifCsvUserData::parse(const QString& fileName, const AsciiDataParseOptions& parseOptions, QString* errorText) { m_allResultAddresses.clear(); m_timeSteps.clear(); @@ -59,11 +59,10 @@ bool RifCsvUserData::parse(const QString& data, const AsciiDataParseOptions& par m_mapFromAddressToResultIndex.clear(); m_parser = std::unique_ptr(new RifCsvUserDataParser(errorText)); - m_parser->parse(data, parseOptions); + m_parser->parse(fileName, parseOptions); if (!m_parser) { RiaLogging::error(QString("Failed to parse file")); - return false; } diff --git a/ApplicationCode/FileInterface/RifCsvUserData.h b/ApplicationCode/FileInterface/RifCsvUserData.h index 4a14e9b487..7267fd26b7 100644 --- a/ApplicationCode/FileInterface/RifCsvUserData.h +++ b/ApplicationCode/FileInterface/RifCsvUserData.h @@ -43,7 +43,7 @@ public: RifCsvUserData(); ~RifCsvUserData(); - bool parse(const QString& data, const AsciiDataParseOptions& parseOptions, QString* errorText = nullptr); + bool parse(const QString& fileName, const AsciiDataParseOptions& parseOptions, QString* errorText = nullptr); virtual const std::vector& timeSteps(const RifEclipseSummaryAddress& resultAddress) const override; diff --git a/ApplicationCode/FileInterface/RifCsvUserDataParser.cpp b/ApplicationCode/FileInterface/RifCsvUserDataParser.cpp index 6a320ba1fb..4a9194cc09 100644 --- a/ApplicationCode/FileInterface/RifCsvUserDataParser.cpp +++ b/ApplicationCode/FileInterface/RifCsvUserDataParser.cpp @@ -30,7 +30,7 @@ #include #include - +#include //-------------------------------------------------------------------------------------------------- /// @@ -44,9 +44,9 @@ RifCsvUserDataParser::RifCsvUserDataParser(QString* errorText) //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -bool RifCsvUserDataParser::parse(const QString& data, const AsciiDataParseOptions& parseOptions) +bool RifCsvUserDataParser::parse(const QString& fileName, const AsciiDataParseOptions& parseOptions) { - return parseData(data, parseOptions); + return parseData(fileName, parseOptions); } //-------------------------------------------------------------------------------------------------- @@ -71,13 +71,21 @@ const ColumnInfo* RifCsvUserDataParser::columnInfo(size_t columnIndex) const //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -bool RifCsvUserDataParser::parseData(const QString& data, const AsciiDataParseOptions& parseOptions) +bool RifCsvUserDataParser::parseData(const QString& fileName, const AsciiDataParseOptions& parseOptions) { + bool errors = false; enum { HEADER_ROW, FIRST_DATA_ROW, DATA_ROW } parseState = HEADER_ROW; int colCount = -1; std::vector cols; - QTextStream dataStream(const_cast(&data)); + QFile file(fileName); + if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) + { + RiaLogging::error(QString("Failed to open %1").arg(fileName)); + return false; + } + + QTextStream dataStream(&file); while (!dataStream.atEnd()) { QString line = dataStream.readLine(); @@ -102,7 +110,8 @@ bool RifCsvUserDataParser::parseData(const QString& data, const AsciiDataParseOp else if(lineColumns.size() != colCount) { m_errorText->append("CSV file has invalid content (Column count mismatch)"); - return false; + errors = true; + break; } else if(parseState == FIRST_DATA_ROW) { @@ -161,15 +170,21 @@ bool RifCsvUserDataParser::parseData(const QString& data, const AsciiDataParseOp catch (...) { m_errorText->append("CSV file has invalid content (Column type mismatch)"); - return false; + errors = true; + break; } } } } - TableData td("", "", cols); - m_tableData = td; - return true; + file.close(); + + if (!errors) + { + TableData td("", "", cols); + m_tableData = td; + } + return !errors; } //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationCode/FileInterface/RifCsvUserDataParser.h b/ApplicationCode/FileInterface/RifCsvUserDataParser.h index fc4516d6bb..62359d729a 100644 --- a/ApplicationCode/FileInterface/RifCsvUserDataParser.h +++ b/ApplicationCode/FileInterface/RifCsvUserDataParser.h @@ -41,13 +41,13 @@ public: RifCsvUserDataParser(QString* errorText = nullptr); - bool parse(const QString& data, const AsciiDataParseOptions& parseOptions); + bool parse(const QString& fileName, const AsciiDataParseOptions& parseOptions); const TableData& tableData() const; const ColumnInfo* columnInfo(size_t columnIndex) const; private: - bool parseData(const QString& data, const AsciiDataParseOptions& parseOptions); + bool parseData(const QString& fileName, const AsciiDataParseOptions& parseOptions); QStringList splitLineAndTrim(const QString& list, const QString& separator); QDateTime tryParseDateTime(const std::string& colData, const QString& format); diff --git a/ApplicationCode/ProjectDataModel/Summary/RimCsvUserData.cpp b/ApplicationCode/ProjectDataModel/Summary/RimCsvUserData.cpp index d2a5bcfa87..bb5326779a 100644 --- a/ApplicationCode/ProjectDataModel/Summary/RimCsvUserData.cpp +++ b/ApplicationCode/ProjectDataModel/Summary/RimCsvUserData.cpp @@ -57,19 +57,8 @@ void RimCsvUserData::createSummaryReaderInterface() if (caf::Utils::fileExists(this->summaryHeaderFilename())) { - QFile file(this->summaryHeaderFilename()); - if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) - { - RiaLogging::error(QString("Failed to open %1").arg(this->summaryHeaderFilename())); - - return; - } - - QTextStream in(&file); - QString fileContents = in.readAll(); - RifCsvUserData* csvUserData = new RifCsvUserData(); - if (csvUserData->parse(fileContents, m_parseOptions, &m_errorText)) + if (csvUserData->parse(this->summaryHeaderFilename(), m_parseOptions, &m_errorText)) { m_summaryReader = csvUserData; } diff --git a/ApplicationCode/ProjectDataModel/Summary/RimObservedDataCollection.cpp b/ApplicationCode/ProjectDataModel/Summary/RimObservedDataCollection.cpp index 22fe69a2f8..f363f8046a 100644 --- a/ApplicationCode/ProjectDataModel/Summary/RimObservedDataCollection.cpp +++ b/ApplicationCode/ProjectDataModel/Summary/RimObservedDataCollection.cpp @@ -84,33 +84,31 @@ RimObservedData* RimObservedDataCollection::createAndAddObservedDataFromFileName { RimObservedData* observedData = nullptr; - if (caf::Utils::fileExists(fileName)) { QFile file(fileName); - if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) + if (!file.exists()) { - QString s = QString("Failed to open %1").arg(fileName); + QString s = QString("File does not exist, %1").arg(fileName); RiaLogging::error(s); if (errorText) errorText->append(s); - return nullptr; } + } - if (fileName.endsWith(".rsm", Qt::CaseInsensitive)) + if (fileName.endsWith(".rsm", Qt::CaseInsensitive)) + { + return createAndAddRsmObservedDataFromFile(fileName, errorText); + } + else if (fileName.endsWith(".txt", Qt::CaseInsensitive) || fileName.endsWith(".csv", Qt::CaseInsensitive)) + { + return createAndAddCvsObservedDataFromFile(fileName, errorText); + } + else + { + if (errorText) { - return createAndAddRsmObservedDataFromFile(file, errorText); - } - else if (fileName.endsWith(".txt", Qt::CaseInsensitive) || fileName.endsWith(".csv", Qt::CaseInsensitive)) - { - return createAndAddCvsObservedDataFromFile(file, errorText); - } - else - { - if (errorText) - { - errorText->append("Not able to import file. Make sure '*.rsm' is used as extension if data is in RMS format or '*.txt' or '*.csv' if data is in CSV format."); - } + errorText->append("Not able to import file. Make sure '*.rsm' is used as extension if data is in RMS format or '*.txt' or '*.csv' if data is in CSV format."); } } @@ -132,20 +130,14 @@ std::vector RimObservedDataCollection::allObservedData() //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -RimObservedData* RimObservedDataCollection::createAndAddRsmObservedDataFromFile(QFile& file, QString* errorText /*= nullptr*/) +RimObservedData* RimObservedDataCollection::createAndAddRsmObservedDataFromFile(const QString& fileName, QString* errorText /*= nullptr*/) { RimObservedData* observedData = nullptr; - - if (!file.isOpen()) return nullptr; - - QTextStream in(&file); - QString fileContents = in.readAll(); - RimObservedEclipseUserData* columnBasedUserData = new RimObservedEclipseUserData(); observedData = columnBasedUserData; this->m_observedDataArray.push_back(observedData); - observedData->setSummaryHeaderFileName(file.fileName()); + observedData->setSummaryHeaderFileName(fileName); observedData->createSummaryReaderInterface(); observedData->updateMetaData(); observedData->updateOptionSensitivity(); @@ -163,20 +155,29 @@ RimObservedData* RimObservedDataCollection::createAndAddRsmObservedDataFromFile( } this->updateConnectedEditors(); + return observedData; } //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -RimObservedData* RimObservedDataCollection::createAndAddCvsObservedDataFromFile(QFile& file, QString* errorText /*= nullptr*/) +RimObservedData* RimObservedDataCollection::createAndAddCvsObservedDataFromFile(const QString& fileName, QString* errorText /*= nullptr*/) { RimObservedData* observedData = nullptr; + QString fileContents; - if (!file.isOpen()) return nullptr; + { + QFile file(fileName); + if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) + { + RiaLogging::error(QString("Failed to open %1").arg(fileName)); + return nullptr; + } - QTextStream in(&file); - QString fileContents = in.readAll(); + fileContents = file.readAll(); + file.close(); + } RicPasteAsciiDataToSummaryPlotFeatureUi parseOptionsUi; parseOptionsUi.setPreviewText(fileContents); @@ -193,7 +194,7 @@ RimObservedData* RimObservedDataCollection::createAndAddCvsObservedDataFromFile( observedData = columnBasedUserData; this->m_observedDataArray.push_back(observedData); - observedData->setSummaryHeaderFileName(file.fileName()); + observedData->setSummaryHeaderFileName(fileName); observedData->createSummaryReaderInterface(); observedData->updateMetaData(); observedData->updateOptionSensitivity(); diff --git a/ApplicationCode/ProjectDataModel/Summary/RimObservedDataCollection.h b/ApplicationCode/ProjectDataModel/Summary/RimObservedDataCollection.h index 282ae43138..3b82e80680 100644 --- a/ApplicationCode/ProjectDataModel/Summary/RimObservedDataCollection.h +++ b/ApplicationCode/ProjectDataModel/Summary/RimObservedDataCollection.h @@ -42,8 +42,8 @@ public: std::vector allObservedData(); private: - RimObservedData* createAndAddRsmObservedDataFromFile(QFile& file, QString* errorText = nullptr); - RimObservedData* createAndAddCvsObservedDataFromFile(QFile& file, QString* errorText = nullptr); + RimObservedData* createAndAddRsmObservedDataFromFile(const QString& fileName, QString* errorText = nullptr); + RimObservedData* createAndAddCvsObservedDataFromFile(const QString& fileName, QString* errorText = nullptr); private: caf::PdmChildArrayField m_observedDataArray;