#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
{
m_timeSteps.resize(m_timeSteps.size() + 1);
std::vector<time_t>& 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<time_t>& 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());
}
}
}

View File

@ -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<int>(dateColumnIndex)].toStdString());
if (candidate.isValid())
QDate observationDate = RiaDateStringParser::parseDateString(entries[static_cast<int>(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<int>(i)).toDouble();
@ -114,5 +117,4 @@ void RifColumnBasedUserDataParser::parseData(const QString& data)
m_tables.push_back(table);
} 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" ||
line == "DAY" ||
line == "YEARS" ||
line == "YEAR")
if (word == "DAYS" ||
word == "DAY" ||
word == "YEARS" ||
word == "YEAR" ||
word == "DATE" ||
word == "DATES")
{
return true;
}

View File

@ -39,6 +39,7 @@ struct ColumnInfo
std::string dateFormatString;
std::string startDateString;
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);
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------