From cc59b85ee9070684fefb4df11cb4b59777e30e3b Mon Sep 17 00:00:00 2001 From: Magne Sjaastad Date: Thu, 5 Oct 2017 10:11:10 +0200 Subject: [PATCH] #1966 : Use DATE if DATE is the only column present --- .../FileInterface/RifColumnBasedUserData.cpp | 62 +++++++++++-------- .../RifColumnBasedUserDataParser.cpp | 12 ++-- .../RifEclipseUserDataParserTools.cpp | 12 ++-- .../RifEclipseUserDataParserTools.h | 1 + .../UnitTests/ObservedDataParser-Test.cpp | 50 +++++++++++++++ 5 files changed, 101 insertions(+), 36 deletions(-) diff --git a/ApplicationCode/FileInterface/RifColumnBasedUserData.cpp b/ApplicationCode/FileInterface/RifColumnBasedUserData.cpp index 6792ce431a..90823d5dbd 100644 --- a/ApplicationCode/FileInterface/RifColumnBasedUserData.cpp +++ b/ApplicationCode/FileInterface/RifColumnBasedUserData.cpp @@ -109,47 +109,57 @@ bool RifColumnBasedUserData::parse(const QString& data, const QString& customWel } else { + m_timeSteps.resize(m_timeSteps.size() + 1); + std::vector& timeSteps = m_timeSteps.back(); + const ColumnInfo& ci = m_parser->tables()[tableIndex][timeColumnIndex]; - QDateTime startDate; - if (ci.startQDateTime.isValid()) + + if (timeColumnIndex == dateColumnIndex) { - startDate = ci.startQDateTime; + for (const auto& timeStepValue : ci.observationDateTimes) + { + timeSteps.push_back(timeStepValue.toTime_t()); + } } else { - QString startDateString = QString::fromStdString(ci.startDateString); - if (!startDateString.isEmpty()) + QDateTime startDate; + if (ci.startQDateTime.isValid()) { - QString dateFormatString = "ddMMyyyy"; - - startDate = RiaQDateTimeTools::fromString(startDateString, dateFormatString); + startDate = ci.startQDateTime; } else { - startDate = RiaQDateTimeTools::epoch(); + QString startDateString = QString::fromStdString(ci.startDateString); + if (!startDateString.isEmpty()) + { + QString dateFormatString = "ddMMyyyy"; + + startDate = RiaQDateTimeTools::fromString(startDateString, dateFormatString); + } + else + { + startDate = RiaQDateTimeTools::epoch(); + } } - } - m_timeSteps.resize(m_timeSteps.size() + 1); + QString unit = QString::fromStdString(ci.unitName).trimmed().toUpper(); - std::vector& timeSteps = m_timeSteps.back(); - - QString unit = QString::fromStdString(ci.unitName).trimmed().toUpper(); - - if (unit == "DAY" || unit == "DAYS") - { - for (const auto& timeStepValue : ci.values) + if (unit == "DAY" || unit == "DAYS") { - QDateTime dateTime = RiaQDateTimeTools::addDays(startDate, timeStepValue); - timeSteps.push_back(dateTime.toTime_t()); + for (const auto& timeStepValue : ci.values) + { + QDateTime dateTime = RiaQDateTimeTools::addDays(startDate, timeStepValue); + timeSteps.push_back(dateTime.toTime_t()); + } } - } - else if (unit == "YEAR" || unit == "YEARS") - { - for (const auto& timeStepValue : ci.values) + else if (unit == "YEAR" || unit == "YEARS") { - QDateTime dateTime = RiaQDateTimeTools::addYears(startDate, timeStepValue); - timeSteps.push_back(dateTime.toTime_t()); + for (const auto& timeStepValue : ci.values) + { + QDateTime dateTime = RiaQDateTimeTools::addYears(startDate, timeStepValue); + timeSteps.push_back(dateTime.toTime_t()); + } } } diff --git a/ApplicationCode/FileInterface/RifColumnBasedUserDataParser.cpp b/ApplicationCode/FileInterface/RifColumnBasedUserDataParser.cpp index d61bee22d5..58676a7182 100644 --- a/ApplicationCode/FileInterface/RifColumnBasedUserDataParser.cpp +++ b/ApplicationCode/FileInterface/RifColumnBasedUserDataParser.cpp @@ -89,13 +89,16 @@ void RifColumnBasedUserDataParser::parseData(const QString& data) for (size_t i = 0; i < columnCount; i++) { - if (dateColumnIndex < columnCount && !startDate.isValid()) + if (dateColumnIndex < columnCount) { - QDate candidate = RiaDateStringParser::parseDateString(entries[static_cast(dateColumnIndex)].toStdString()); - if (candidate.isValid()) + QDate observationDate = RiaDateStringParser::parseDateString(entries[static_cast(dateColumnIndex)].toStdString()); + + if (observationDate.isValid() && !startDate.isValid()) { - startDate.setDate(candidate); + startDate.setDate(observationDate); } + + table[i].observationDateTimes.push_back(QDateTime(observationDate)); } double entry = entries.at(static_cast(i)).toDouble(); @@ -114,5 +117,4 @@ void RifColumnBasedUserDataParser::parseData(const QString& data) m_tables.push_back(table); } while (streamData.good()); - } diff --git a/ApplicationCode/FileInterface/RifEclipseUserDataParserTools.cpp b/ApplicationCode/FileInterface/RifEclipseUserDataParserTools.cpp index 0514d2baa2..b3efa3f533 100644 --- a/ApplicationCode/FileInterface/RifEclipseUserDataParserTools.cpp +++ b/ApplicationCode/FileInterface/RifEclipseUserDataParserTools.cpp @@ -466,12 +466,14 @@ std::vector RifEclipseUserDataParserTools::headerReader(std::string //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -bool RifEclipseUserDataParserTools::hasTimeUnit(const std::string& line) +bool RifEclipseUserDataParserTools::hasTimeUnit(const std::string& word) { - if (line == "DAYS" || - line == "DAY" || - line == "YEARS" || - line == "YEAR") + if (word == "DAYS" || + word == "DAY" || + word == "YEARS" || + word == "YEAR" || + word == "DATE" || + word == "DATES") { return true; } diff --git a/ApplicationCode/FileInterface/RifEclipseUserDataParserTools.h b/ApplicationCode/FileInterface/RifEclipseUserDataParserTools.h index c253e9dfa8..9d8a3221f0 100644 --- a/ApplicationCode/FileInterface/RifEclipseUserDataParserTools.h +++ b/ApplicationCode/FileInterface/RifEclipseUserDataParserTools.h @@ -39,6 +39,7 @@ struct ColumnInfo std::string dateFormatString; std::string startDateString; QDateTime startQDateTime; + std::vector observationDateTimes; }; //================================================================================================== diff --git a/ApplicationCode/UnitTests/ObservedDataParser-Test.cpp b/ApplicationCode/UnitTests/ObservedDataParser-Test.cpp index 24fc58c749..7fab455c6b 100644 --- a/ApplicationCode/UnitTests/ObservedDataParser-Test.cpp +++ b/ApplicationCode/UnitTests/ObservedDataParser-Test.cpp @@ -475,6 +475,56 @@ TEST(RifColumnBasedRsmspecParserTest, TestTableValuesHeaderWithSpaces) } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +TEST(RifColumnBasedRsmspecParserTest, TestTableDateOnly) +{ + QString data; + QTextStream out(&data); + + out << "1\n"; + out << " -----------------------------------------\n"; + out << " SUMMARY OF RUN NORNE_ATW2013_RFTPLT_V3 EC\n"; + out << " -----------------------------------------\n"; + out << " DATE WBHP \n"; + out << " DATE BARSA \n"; + out << " B-1H \n"; + out << " \n"; + out << " ---------------------------\n"; + out << " 6-NOV-1997 0 \n"; + out << " 7-NOV-1997 0 \n"; + out << " 8-NOV-1997 0 \n"; + out << " 9-NOV-1997 0 \n"; + out << " 10-NOV-1997 0 \n"; + out << " 11-NOV-1997 0 \n"; + out << " 11-NOV-1997 0 \n"; + out << " 12-NOV-1997 0 \n"; + out << " 13-NOV-1997 0 \n"; + out << " 14-NOV-1997 0 \n"; + out << " 14-NOV-1997 0 \n"; + out << " 17-NOV-1997 0 \n"; + out << " 19-NOV-1997 0 \n"; + out << " 21-NOV-1997 0 \n"; + out << " 23-NOV-1997 0 \n"; + out << " 25-NOV-1997 0 \n"; + out << " 28-NOV-1997 0 \n"; + out << " 29-NOV-1997 0 \n"; + out << " 1-DEC-1997 0 \n"; + out << " 2-DEC-1997 0 \n"; + out << " 4-DEC-1997 0 \n"; + out << " 7-DEC-1997 0 \n"; + out << " 10-DEC-1997 0 \n"; + out << " 13-DEC-1997 0 \n"; + out << " 15-DEC-1997 0 \n"; + out << " 17-DEC-1997 0 \n"; + + RifColumnBasedUserDataParser parser = RifColumnBasedUserDataParser(data); + + std::vector< std::vector > tables = parser.tables(); + ASSERT_EQ(tables.size(), 1); +} + //-------------------------------------------------------------------------------------------------- /// //--------------------------------------------------------------------------------------------------