From 987cb92f431cf1ce3a5d767c9885e744a8720040 Mon Sep 17 00:00:00 2001 From: Magne Sjaastad Date: Mon, 29 Apr 2019 13:35:09 +0200 Subject: [PATCH] #4017 Automatic parsing of date-time format in CSV Observed Time History Data --- ...icPasteAsciiDataToSummaryPlotFeatureUi.cpp | 22 ++++++++- .../RicPasteAsciiDataToSummaryPlotFeatureUi.h | 1 + .../FileInterface/RifCsvUserDataParser.cpp | 48 ++++++++++++++++++- .../FileInterface/RifCsvUserDataParser.h | 1 + 4 files changed, 69 insertions(+), 3 deletions(-) diff --git a/ApplicationCode/Commands/SummaryPlotCommands/RicPasteAsciiDataToSummaryPlotFeatureUi.cpp b/ApplicationCode/Commands/SummaryPlotCommands/RicPasteAsciiDataToSummaryPlotFeatureUi.cpp index 59b04f614a..3f7a2fca2c 100644 --- a/ApplicationCode/Commands/SummaryPlotCommands/RicPasteAsciiDataToSummaryPlotFeatureUi.cpp +++ b/ApplicationCode/Commands/SummaryPlotCommands/RicPasteAsciiDataToSummaryPlotFeatureUi.cpp @@ -466,7 +466,7 @@ void RicPasteAsciiDataToSummaryPlotFeatureUi::fieldChangedByUi(const caf::PdmFie { if (changedField == &m_cellSeparator || changedField == &m_timeSeriesColumnName) { - m_previewText = m_parser->previewText(PREVIEW_TEXT_LINE_COUNT, parseOptions()); + updatePreviewTextAndDateFormat(); } } @@ -495,5 +495,23 @@ void RicPasteAsciiDataToSummaryPlotFeatureUi::initialize(RifCsvUserDataParser* p m_timeSeriesColumnName = QString::fromStdString(parser->tableData().columnInfos()[0].columnName()); } - m_previewText = parser->previewText(PREVIEW_TEXT_LINE_COUNT, parseOptions()); + updatePreviewTextAndDateFormat(); +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RicPasteAsciiDataToSummaryPlotFeatureUi::updatePreviewTextAndDateFormat() +{ + m_previewText = m_parser->previewText(PREVIEW_TEXT_LINE_COUNT, parseOptions()); + + QStringList timeStrings = m_parser->timeColumnPreviewData(PREVIEW_TEXT_LINE_COUNT, parseOptions()); + + DateFormat df = DATE_DDMMYYYY_DOT_SEPARATED; + for (auto& s : timeStrings) + { + df = dateFormatFromString(s); + } + + m_dateFormat = df; } diff --git a/ApplicationCode/Commands/SummaryPlotCommands/RicPasteAsciiDataToSummaryPlotFeatureUi.h b/ApplicationCode/Commands/SummaryPlotCommands/RicPasteAsciiDataToSummaryPlotFeatureUi.h index a8d2926949..7580f96490 100644 --- a/ApplicationCode/Commands/SummaryPlotCommands/RicPasteAsciiDataToSummaryPlotFeatureUi.h +++ b/ApplicationCode/Commands/SummaryPlotCommands/RicPasteAsciiDataToSummaryPlotFeatureUi.h @@ -143,6 +143,7 @@ protected: private: void initialize(RifCsvUserDataParser* parser); + void updatePreviewTextAndDateFormat(); private: UiMode m_uiMode; diff --git a/ApplicationCode/FileInterface/RifCsvUserDataParser.cpp b/ApplicationCode/FileInterface/RifCsvUserDataParser.cpp index 88ef42053e..55a99b4e88 100644 --- a/ApplicationCode/FileInterface/RifCsvUserDataParser.cpp +++ b/ApplicationCode/FileInterface/RifCsvUserDataParser.cpp @@ -218,6 +218,52 @@ QString RifCsvUserDataParser::previewText(int lineCount, const AsciiDataParseOpt return preview; } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +QStringList RifCsvUserDataParser::timeColumnPreviewData(int lineCount, const AsciiDataParseOptions& parseOptions) +{ + QStringList timeStrings; + + QTextStream* stream = openDataStream(); + + if (stream) + { + int timeColumnIndex = -1; + int iLine = 0; + + while (iLine < lineCount && !stream->atEnd()) + { + QString line = stream->readLine(); + + if (line.isEmpty()) continue; + + int iCol = 0; + QStringList cols = RifFileParseTools::splitLineAndTrim(line, parseOptions.cellSeparator); + for (const QString& cellData : cols) + { + if (cellData == parseOptions.timeSeriesColumnName && iLine == 0) + { + timeColumnIndex = iCol; + } + + if (iLine > 0 && timeColumnIndex != -1 && timeColumnIndex == iCol) + { + timeStrings.push_back(cellData); + } + + iCol++; + } + + iLine++; + } + } + + closeDataStream(); + + return timeStrings; +} + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- @@ -784,4 +830,4 @@ void RifCsvUserDataPastedTextParser::closeDataStream() delete m_textStream; m_textStream = nullptr; } -} \ No newline at end of file +} diff --git a/ApplicationCode/FileInterface/RifCsvUserDataParser.h b/ApplicationCode/FileInterface/RifCsvUserDataParser.h index 639b00ff23..6cc1a14079 100644 --- a/ApplicationCode/FileInterface/RifCsvUserDataParser.h +++ b/ApplicationCode/FileInterface/RifCsvUserDataParser.h @@ -54,6 +54,7 @@ public: bool parseColumnInfo(const AsciiDataParseOptions& parseOptions); QString previewText(int lineCount, const AsciiDataParseOptions& parseOptions); + QStringList timeColumnPreviewData(int lineCount, const AsciiDataParseOptions& parseOptions); CsvLayout determineCsvLayout();