#1966 : Use DATE if DATE is the only column present

This commit is contained in:
Magne Sjaastad 2017-10-05 10:11:10 +02:00
parent 56cd53a5f0
commit cc59b85ee9
5 changed files with 101 additions and 36 deletions

View File

@ -109,47 +109,57 @@ bool RifColumnBasedUserData::parse(const QString& data, const QString& customWel
} }
else else
{ {
m_timeSteps.resize(m_timeSteps.size() + 1);
std::vector<time_t>& timeSteps = m_timeSteps.back();
const ColumnInfo& ci = m_parser->tables()[tableIndex][timeColumnIndex]; 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 else
{ {
QString startDateString = QString::fromStdString(ci.startDateString); QDateTime startDate;
if (!startDateString.isEmpty()) if (ci.startQDateTime.isValid())
{ {
QString dateFormatString = "ddMMyyyy"; startDate = ci.startQDateTime;
startDate = RiaQDateTimeTools::fromString(startDateString, dateFormatString);
} }
else 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<time_t>& timeSteps = m_timeSteps.back(); if (unit == "DAY" || unit == "DAYS")
QString unit = QString::fromStdString(ci.unitName).trimmed().toUpper();
if (unit == "DAY" || unit == "DAYS")
{
for (const auto& timeStepValue : ci.values)
{ {
QDateTime dateTime = RiaQDateTimeTools::addDays(startDate, timeStepValue); for (const auto& timeStepValue : ci.values)
timeSteps.push_back(dateTime.toTime_t()); {
QDateTime dateTime = RiaQDateTimeTools::addDays(startDate, timeStepValue);
timeSteps.push_back(dateTime.toTime_t());
}
} }
} else if (unit == "YEAR" || unit == "YEARS")
else if (unit == "YEAR" || unit == "YEARS")
{
for (const auto& timeStepValue : ci.values)
{ {
QDateTime dateTime = RiaQDateTimeTools::addYears(startDate, timeStepValue); for (const auto& timeStepValue : ci.values)
timeSteps.push_back(dateTime.toTime_t()); {
QDateTime dateTime = RiaQDateTimeTools::addYears(startDate, timeStepValue);
timeSteps.push_back(dateTime.toTime_t());
}
} }
} }

View File

@ -89,13 +89,16 @@ void RifColumnBasedUserDataParser::parseData(const QString& data)
for (size_t i = 0; i < columnCount; i++) for (size_t i = 0; i < columnCount; i++)
{ {
if (dateColumnIndex < columnCount && !startDate.isValid()) if (dateColumnIndex < columnCount)
{ {
QDate candidate = RiaDateStringParser::parseDateString(entries[static_cast<int>(dateColumnIndex)].toStdString()); QDate observationDate = RiaDateStringParser::parseDateString(entries[static_cast<int>(dateColumnIndex)].toStdString());
if (candidate.isValid())
if (observationDate.isValid() && !startDate.isValid())
{ {
startDate.setDate(candidate); startDate.setDate(observationDate);
} }
table[i].observationDateTimes.push_back(QDateTime(observationDate));
} }
double entry = entries.at(static_cast<int>(i)).toDouble(); double entry = entries.at(static_cast<int>(i)).toDouble();
@ -114,5 +117,4 @@ void RifColumnBasedUserDataParser::parseData(const QString& data)
m_tables.push_back(table); m_tables.push_back(table);
} while (streamData.good()); } while (streamData.good());
} }

View File

@ -466,12 +466,14 @@ std::vector<std::string> RifEclipseUserDataParserTools::headerReader(std::string
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
/// ///
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
bool RifEclipseUserDataParserTools::hasTimeUnit(const std::string& line) bool RifEclipseUserDataParserTools::hasTimeUnit(const std::string& word)
{ {
if (line == "DAYS" || if (word == "DAYS" ||
line == "DAY" || word == "DAY" ||
line == "YEARS" || word == "YEARS" ||
line == "YEAR") word == "YEAR" ||
word == "DATE" ||
word == "DATES")
{ {
return true; return true;
} }

View File

@ -39,6 +39,7 @@ struct ColumnInfo
std::string dateFormatString; std::string dateFormatString;
std::string startDateString; std::string startDateString;
QDateTime startQDateTime; QDateTime startQDateTime;
std::vector<QDateTime> observationDateTimes;
}; };
//================================================================================================== //==================================================================================================

View File

@ -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<ColumnInfo> > tables = parser.tables();
ASSERT_EQ(tables.size(), 1);
}
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
/// ///
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------