mirror of
https://github.com/OPM/ResInsight.git
synced 2025-02-25 18:55:39 -06:00
#2018 CSV import. More date formats. Bugfix in import dialog
This commit is contained in:
parent
28db4c6e22
commit
3872be8f35
@ -162,7 +162,7 @@ std::vector<RimAsciiDataCurve*> RicPasteAsciiDataToSummaryPlotFeature::parseCurv
|
||||
{
|
||||
std::vector<RimAsciiDataCurve*> curves;
|
||||
const AsciiDataParseOptions& parseOptions = settings.parseOptions();
|
||||
RifColumnBasedAsciiParser parser = RifColumnBasedAsciiParser(data, parseOptions.dateTimeFormat(), parseOptions.locale, parseOptions.cellSeparator);
|
||||
RifColumnBasedAsciiParser parser = RifColumnBasedAsciiParser(data, parseOptions.dateTimeFormat, parseOptions.locale, parseOptions.cellSeparator);
|
||||
|
||||
if (parser.headers().empty())
|
||||
{
|
||||
|
@ -37,17 +37,26 @@ namespace caf {
|
||||
void RicPasteAsciiDataToSummaryPlotFeatureUi::DateFormatEnum::setUp()
|
||||
{
|
||||
addItem(RicPasteAsciiDataToSummaryPlotFeatureUi::DATE_DDMMYYYY_DOT_SEPARATED, "dd.MM.yyyy", "Day.Month.Year (dd.MM.yyyy)");
|
||||
addItem(RicPasteAsciiDataToSummaryPlotFeatureUi::DATE_DDMMYYYY_DASH_SEPARATED, "dd-MM-yyyy", "Day-Month-Year (dd-MM-yyyy)");
|
||||
addItem(RicPasteAsciiDataToSummaryPlotFeatureUi::DATE_DDMMYYYY_SLASH_SEPARATED, "dd/MM/yyyy", "Day/Month/Year (dd/MM/yyyy)");
|
||||
|
||||
addItem(RicPasteAsciiDataToSummaryPlotFeatureUi::DATE_YYYYMMDD_DOT_SEPARATED, "yyyy.MM.dd", "Year.Month.Day (yyyy.MM.dd)");
|
||||
addItem(RicPasteAsciiDataToSummaryPlotFeatureUi::DATE_YYYYMMDD_DASH_SEPARATED, "yyyy-MM-dd", "Year-Month-Day (yyyy-MM-dd)");
|
||||
addItem(RicPasteAsciiDataToSummaryPlotFeatureUi::DATE_YYYYMMDD_SLASH_SEPARATED, "yyyy/MM/dd", "Year/Month/Day (yyyy/MM/dd)");
|
||||
|
||||
addItem(RicPasteAsciiDataToSummaryPlotFeatureUi::DATE_MMDDYYYY_SLASH_SEPARATED, "MM/dd/yyyy", "Month/Day/Year (MM/dd/yyyy)");
|
||||
addItem(RicPasteAsciiDataToSummaryPlotFeatureUi::DATE_MMDDYY_SLASH_SEPARATED, "MM/dd/yy", "Month/Day/Year (MM/dd/yy)");
|
||||
|
||||
setDefault(RicPasteAsciiDataToSummaryPlotFeatureUi::DATE_DDMMYYYY_DOT_SEPARATED);
|
||||
}
|
||||
|
||||
template<>
|
||||
void RicPasteAsciiDataToSummaryPlotFeatureUi::TimeFormatEnum::setUp()
|
||||
{
|
||||
addItem(RicPasteAsciiDataToSummaryPlotFeatureUi::TIME_NONE, "NONE", "None");
|
||||
addItem(RicPasteAsciiDataToSummaryPlotFeatureUi::TIME_HHMM, "hh:mm", "Hour:Minute (hh:mm)");
|
||||
addItem(RicPasteAsciiDataToSummaryPlotFeatureUi::TIME_HHMMSS, "hh:mm:ss", "Hour:Minute:Second (hh:mm:ss)");
|
||||
addItem(RicPasteAsciiDataToSummaryPlotFeatureUi::TIME_HHMMSSZZZ, "hh:mm:ss.zzz", "Hour:Minute:Second.Millisecond (hh:mm:ss.zzz)");
|
||||
setDefault(RicPasteAsciiDataToSummaryPlotFeatureUi::TIME_NONE);
|
||||
setDefault(RicPasteAsciiDataToSummaryPlotFeatureUi::TIME_HHMM);
|
||||
}
|
||||
|
||||
template<>
|
||||
@ -75,12 +84,6 @@ RicPasteAsciiDataToSummaryPlotFeatureUi::CellSeparator mapCellSeparator(const QS
|
||||
return RicPasteAsciiDataToSummaryPlotFeatureUi::CELL_TAB;
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
|
||||
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
@ -95,8 +98,8 @@ RicPasteAsciiDataToSummaryPlotFeatureUi::RicPasteAsciiDataToSummaryPlotFeatureUi
|
||||
|
||||
CAF_PDM_InitFieldNoDefault(&m_dateFormat, "DateFormat", "Date Format", "", "", "");
|
||||
CAF_PDM_InitFieldNoDefault(&m_timeFormat, "TimeFormat", "Time Format", "", "", "");
|
||||
CAF_PDM_InitField(&m_useCustomDateFormat, "UseCustomDateFormat", false, "Use Custom Date Format", "", "", "");
|
||||
CAF_PDM_InitField(&m_customDateFormat, "CustomDateFormat", QString(), "Custom Date Format", "", "", "");
|
||||
CAF_PDM_InitField(&m_useCustomDateFormat, "UseCustomDateFormat", false, "Use Custom Date Time Format", "", "", "");
|
||||
CAF_PDM_InitField(&m_customDateTimeFormat,"CustomDateTimeFormat", QString(), "Custom Date Time Format", "", "", "");
|
||||
|
||||
CAF_PDM_InitField(&m_curveLineStyle, "LineStyle", caf::AppEnum<RimPlotCurve::LineStyleEnum>(RimPlotCurve::STYLE_NONE), "Line Style", "", "", "");
|
||||
CAF_PDM_InitField(&m_curveSymbol, "Symbol", caf::AppEnum<RimPlotCurve::PointSymbolEnum>(RimPlotCurve::SYMBOL_ELLIPSE), "Symbol", "", "", "");
|
||||
@ -110,6 +113,8 @@ RicPasteAsciiDataToSummaryPlotFeatureUi::RicPasteAsciiDataToSummaryPlotFeatureUi
|
||||
m_previewText.uiCapability()->setUiEditorTypeName(caf::PdmUiTextEditor::uiEditorTypeName());
|
||||
m_previewText.uiCapability()->setUiLabelPosition(caf::PdmUiItemInfo::HIDDEN);
|
||||
m_previewText.uiCapability()->setUiReadOnly(true);
|
||||
|
||||
m_uiMode = UI_MODE_NONE;
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
@ -118,10 +123,9 @@ RicPasteAsciiDataToSummaryPlotFeatureUi::RicPasteAsciiDataToSummaryPlotFeatureUi
|
||||
void RicPasteAsciiDataToSummaryPlotFeatureUi::setUiModeImport(const QString& fileName)
|
||||
{
|
||||
m_uiMode = UI_MODE_IMPORT;
|
||||
m_fileName = fileName;
|
||||
|
||||
RifCsvUserDataFileParser parser(fileName);
|
||||
m_previewText = parser.previewText();
|
||||
m_parser = std::unique_ptr<RifCsvUserDataParser>(new RifCsvUserDataFileParser(fileName));
|
||||
initialize(m_parser.get());
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
@ -130,10 +134,9 @@ void RicPasteAsciiDataToSummaryPlotFeatureUi::setUiModeImport(const QString& fil
|
||||
void RicPasteAsciiDataToSummaryPlotFeatureUi::setUiModePasteText(const QString& text)
|
||||
{
|
||||
m_uiMode = UI_MODE_PASTE;
|
||||
m_pastedText = text;
|
||||
|
||||
RifCsvUserDataPastedTextParser parser(text);
|
||||
m_previewText = parser.previewText();
|
||||
m_parser = std::unique_ptr<RifCsvUserDataParser>(new RifCsvUserDataPastedTextParser(text));
|
||||
initialize(m_parser.get());
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
@ -147,62 +150,53 @@ const AsciiDataParseOptions RicPasteAsciiDataToSummaryPlotFeatureUi::parseOption
|
||||
parseOptions.curvePrefix = m_curvePrefix();
|
||||
|
||||
{
|
||||
QString separator;
|
||||
QLocale locale;
|
||||
switch (m_decimalSeparator())
|
||||
{
|
||||
case DECIMAL_COMMA:
|
||||
separator = ",";
|
||||
locale = QLocale::Norwegian;
|
||||
parseOptions.decimalSeparator = ",";
|
||||
parseOptions.locale = QLocale::Norwegian;
|
||||
break;
|
||||
case DECIMAL_DOT:
|
||||
default:
|
||||
separator = ".";
|
||||
locale = QLocale::c();
|
||||
parseOptions.decimalSeparator = ".";
|
||||
parseOptions.locale = QLocale::c();
|
||||
break;
|
||||
}
|
||||
|
||||
parseOptions.decimalSeparator = separator;
|
||||
parseOptions.locale = locale;
|
||||
}
|
||||
|
||||
{
|
||||
QString dateFormat;
|
||||
|
||||
if (m_useCustomDateFormat())
|
||||
{
|
||||
dateFormat = m_customDateFormat;
|
||||
parseOptions.useCustomDateTimeFormat = true;
|
||||
parseOptions.dateFormat = "";
|
||||
parseOptions.timeFormat = "";
|
||||
parseOptions.dateTimeFormat = m_customDateTimeFormat();
|
||||
}
|
||||
else
|
||||
{
|
||||
dateFormat = m_dateFormat().text();
|
||||
parseOptions.useCustomDateTimeFormat = false;
|
||||
parseOptions.dateFormat = m_dateFormat().text();
|
||||
parseOptions.timeFormat = m_timeFormat().text();
|
||||
parseOptions.dateTimeFormat = parseOptions.dateFormat + " " + parseOptions.timeFormat;
|
||||
}
|
||||
|
||||
parseOptions.dateFormat = dateFormat;
|
||||
}
|
||||
|
||||
parseOptions.timeSeriesColumnName = m_timeSeriesColumnName();
|
||||
|
||||
parseOptions.timeFormat = m_timeFormat() != TIME_NONE ? m_timeFormat().text() : QString("");
|
||||
|
||||
{
|
||||
QString separator;
|
||||
|
||||
switch (m_cellSeparator())
|
||||
{
|
||||
case CELL_COMMA:
|
||||
separator = ",";
|
||||
parseOptions.cellSeparator = ",";
|
||||
break;
|
||||
case CELL_SEMICOLON:
|
||||
separator = ";";
|
||||
parseOptions.cellSeparator = ";";
|
||||
break;
|
||||
case CELL_TAB:
|
||||
default:
|
||||
separator = "\t";
|
||||
parseOptions.cellSeparator = "\t";
|
||||
break;
|
||||
}
|
||||
|
||||
parseOptions.cellSeparator = separator;
|
||||
}
|
||||
|
||||
parseOptions.curveLineStyle = m_curveLineStyle();
|
||||
@ -225,6 +219,8 @@ void RicPasteAsciiDataToSummaryPlotFeatureUi::createNewPlot()
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
void RicPasteAsciiDataToSummaryPlotFeatureUi::defineUiOrdering(QString uiConfigName, caf::PdmUiOrdering& uiOrdering)
|
||||
{
|
||||
CVF_ASSERT(m_uiMode != UI_MODE_NONE);
|
||||
|
||||
if(m_uiMode == UI_MODE_PASTE)
|
||||
{
|
||||
caf::PdmUiGroup* namingGroup = uiOrdering.addNewGroup("Naming");
|
||||
@ -247,7 +243,7 @@ void RicPasteAsciiDataToSummaryPlotFeatureUi::defineUiOrdering(QString uiConfigN
|
||||
dateGroup->add(&m_useCustomDateFormat);
|
||||
if (m_useCustomDateFormat())
|
||||
{
|
||||
dateGroup->add(&m_customDateFormat);
|
||||
dateGroup->add(&m_customDateTimeFormat);
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -272,7 +268,7 @@ void RicPasteAsciiDataToSummaryPlotFeatureUi::defineUiOrdering(QString uiConfigN
|
||||
}
|
||||
|
||||
{
|
||||
caf::PdmUiGroup* previewGroup = uiOrdering.addNewGroup("Preview");
|
||||
caf::PdmUiGroup* previewGroup = uiOrdering.addNewGroup("Preview - First 30 lines, Pretty Print");
|
||||
|
||||
previewGroup->add(&m_previewText);
|
||||
}
|
||||
@ -286,43 +282,20 @@ void RicPasteAsciiDataToSummaryPlotFeatureUi::defineUiOrdering(QString uiConfigN
|
||||
QList<caf::PdmOptionItemInfo> RicPasteAsciiDataToSummaryPlotFeatureUi::calculateValueOptions(const caf::PdmFieldHandle* fieldNeedingOptions,
|
||||
bool* useOptionsOnly)
|
||||
{
|
||||
CVF_ASSERT(m_uiMode != UI_MODE_NONE);
|
||||
|
||||
QList<caf::PdmOptionItemInfo> options;
|
||||
|
||||
if (fieldNeedingOptions == &m_timeSeriesColumnName)
|
||||
{
|
||||
QString cellSep;
|
||||
RifCsvUserDataParser* parser;
|
||||
|
||||
if (m_uiMode == UI_MODE_IMPORT)
|
||||
{
|
||||
parser = new RifCsvUserDataFileParser(m_fileName);
|
||||
}
|
||||
else
|
||||
{
|
||||
parser = new RifCsvUserDataPastedTextParser(m_pastedText);
|
||||
}
|
||||
|
||||
cellSep = parser->tryDetermineCellSeparator();
|
||||
if (!cellSep.isEmpty())
|
||||
{
|
||||
m_cellSeparator = mapCellSeparator(cellSep);
|
||||
}
|
||||
|
||||
std::vector<QString> columnNames;
|
||||
if (parser->parseColumnNames(parseOptions().cellSeparator, &columnNames))
|
||||
{
|
||||
for (const QString& columnName : columnNames)
|
||||
{
|
||||
options.push_back(caf::PdmOptionItemInfo(columnName, columnName));
|
||||
}
|
||||
|
||||
if (columnNames.size() > 0)
|
||||
{
|
||||
m_timeSeriesColumnName = columnNames.front();
|
||||
}
|
||||
m_parser->parseColumnNames(parseOptions().cellSeparator, &columnNames);
|
||||
|
||||
for (const QString& columnName : columnNames)
|
||||
{
|
||||
options.push_back(caf::PdmOptionItemInfo(columnName, columnName));
|
||||
}
|
||||
|
||||
delete parser;
|
||||
}
|
||||
return options;
|
||||
}
|
||||
@ -341,3 +314,24 @@ void RicPasteAsciiDataToSummaryPlotFeatureUi::defineEditorAttribute(const caf::P
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
void RicPasteAsciiDataToSummaryPlotFeatureUi::initialize(RifCsvUserDataParser* parser)
|
||||
{
|
||||
QString cellSep = parser->tryDetermineCellSeparator();
|
||||
if (!cellSep.isEmpty())
|
||||
{
|
||||
m_cellSeparator = mapCellSeparator(cellSep);
|
||||
}
|
||||
|
||||
std::vector<QString> columnNames;
|
||||
parser->parseColumnNames(parseOptions().cellSeparator, &columnNames);
|
||||
if (columnNames.size() > 0)
|
||||
{
|
||||
m_timeSeriesColumnName = columnNames[0];
|
||||
}
|
||||
|
||||
m_previewText = parser->previewText();
|
||||
}
|
||||
|
@ -20,6 +20,8 @@
|
||||
|
||||
#include "RimPlotCurve.h"
|
||||
|
||||
#include "RifCsvUserDataParser.h"
|
||||
|
||||
#include "cafPdmObject.h"
|
||||
#include "cafPdmField.h"
|
||||
#include "cafAppEnum.h"
|
||||
@ -27,26 +29,32 @@
|
||||
#include <QString>
|
||||
#include <QLocale>
|
||||
|
||||
#include <memory>
|
||||
|
||||
|
||||
//==================================================================================================
|
||||
///
|
||||
//==================================================================================================
|
||||
class AsciiDataParseOptions
|
||||
{
|
||||
public:
|
||||
AsciiDataParseOptions() : useCustomDateTimeFormat(false) { }
|
||||
|
||||
QString plotTitle;
|
||||
QString curvePrefix;
|
||||
QString decimalSeparator;
|
||||
QLocale locale;
|
||||
|
||||
bool useCustomDateTimeFormat;
|
||||
QString dateFormat;
|
||||
QString timeFormat;
|
||||
QString dateTimeFormat;
|
||||
QString cellSeparator;
|
||||
QString timeSeriesColumnName;
|
||||
|
||||
RimPlotCurve::LineStyleEnum curveLineStyle;
|
||||
RimPlotCurve::PointSymbolEnum curveSymbol;
|
||||
float curveSymbolSkipDistance;
|
||||
|
||||
QString dateTimeFormat() const { return dateFormat + " " + timeFormat; }
|
||||
};
|
||||
|
||||
|
||||
@ -60,6 +68,7 @@ class RicPasteAsciiDataToSummaryPlotFeatureUi : public caf::PdmObject
|
||||
public:
|
||||
enum UiMode
|
||||
{
|
||||
UI_MODE_NONE,
|
||||
UI_MODE_IMPORT,
|
||||
UI_MODE_PASTE
|
||||
};
|
||||
@ -75,13 +84,19 @@ public:
|
||||
enum DateFormat
|
||||
{
|
||||
DATE_DDMMYYYY_DOT_SEPARATED,
|
||||
DATE_DDMMYYYY_DASH_SEPARATED,
|
||||
DATE_DDMMYYYY_SLASH_SEPARATED,
|
||||
DATE_YYYYMMDD_DOT_SEPARATED,
|
||||
DATE_YYYYMMDD_DASH_SEPARATED,
|
||||
DATE_YYYYMMDD_SLASH_SEPARATED,
|
||||
DATE_MMDDYYYY_SLASH_SEPARATED,
|
||||
DATE_MMDDYY_SLASH_SEPARATED
|
||||
};
|
||||
|
||||
typedef caf::AppEnum<DateFormat> DateFormatEnum;
|
||||
|
||||
enum TimeFormat
|
||||
{
|
||||
TIME_NONE,
|
||||
TIME_HHMM,
|
||||
TIME_HHMMSS,
|
||||
TIME_HHMMSSZZZ,
|
||||
@ -112,6 +127,9 @@ protected:
|
||||
virtual QList<caf::PdmOptionItemInfo> calculateValueOptions(const caf::PdmFieldHandle* fieldNeedingOptions, bool* useOptionsOnly) override;
|
||||
virtual void defineEditorAttribute(const caf::PdmFieldHandle* field, QString uiConfigName, caf::PdmUiEditorAttribute* attribute) override;
|
||||
|
||||
private:
|
||||
void initialize(RifCsvUserDataParser* parser);
|
||||
|
||||
private:
|
||||
UiMode m_uiMode;
|
||||
|
||||
@ -121,7 +139,7 @@ private:
|
||||
caf::PdmField<DateFormatEnum> m_dateFormat;
|
||||
caf::PdmField<TimeFormatEnum> m_timeFormat;
|
||||
caf::PdmField<bool> m_useCustomDateFormat;
|
||||
caf::PdmField<QString> m_customDateFormat;
|
||||
caf::PdmField<QString> m_customDateTimeFormat;
|
||||
caf::PdmField<CellSeparatorEnum> m_cellSeparator;
|
||||
caf::PdmField<QString> m_timeSeriesColumnName;
|
||||
|
||||
@ -132,7 +150,5 @@ private:
|
||||
bool m_createNewPlot;
|
||||
caf::PdmField<QString> m_previewText;
|
||||
|
||||
// Data source
|
||||
QString m_fileName;
|
||||
QString m_pastedText;
|
||||
std::unique_ptr<RifCsvUserDataParser> m_parser;
|
||||
};
|
||||
|
@ -26,6 +26,8 @@
|
||||
#include "RiaStdStringTools.h"
|
||||
#include "RiaQDateTimeTools.h"
|
||||
|
||||
#include "../Commands/SummaryPlotCommands/RicPasteAsciiDataToSummaryPlotFeatureUi.h"
|
||||
|
||||
#include "cvfAssert.h"
|
||||
|
||||
#include <QString>
|
||||
@ -241,11 +243,15 @@ bool RifCsvUserDataParser::parseData(const AsciiDataParseOptions& parseOptions)
|
||||
}
|
||||
else if (col.dataType == ColumnInfo::DATETIME)
|
||||
{
|
||||
QDateTime dt = tryParseDateTime(colData.toStdString(), parseOptions.dateTimeFormat());
|
||||
if (!dt.isValid())
|
||||
QDateTime dt;
|
||||
dt = tryParseDateTime(colData.toStdString(), parseOptions.dateTimeFormat);
|
||||
|
||||
if (!dt.isValid() && !parseOptions.useCustomDateTimeFormat)
|
||||
{
|
||||
// Try to match date format only
|
||||
dt = tryParseDateTime(colData.toStdString(), parseOptions.dateFormat);
|
||||
}
|
||||
|
||||
if (!dt.isValid()) throw 0;
|
||||
col.dateTimeValues.push_back(dt);
|
||||
}
|
||||
|
@ -21,8 +21,6 @@
|
||||
#include "RifEclipseSummaryAddress.h"
|
||||
#include "RifEclipseUserDataParserTools.h"
|
||||
|
||||
#include "../Commands/SummaryPlotCommands/RicPasteAsciiDataToSummaryPlotFeatureUi.h"
|
||||
|
||||
#include <QString>
|
||||
#include <QPointer>
|
||||
#include <QStringList>
|
||||
@ -33,6 +31,7 @@
|
||||
#include <vector>
|
||||
|
||||
class ColumnInfo;
|
||||
class AsciiDataParseOptions;
|
||||
|
||||
//==================================================================================================
|
||||
///
|
||||
|
@ -168,7 +168,6 @@ RimObservedData* RimObservedDataCollection::createAndAddCvsObservedDataFromFile(
|
||||
|
||||
RicPasteAsciiDataToSummaryPlotFeatureUi parseOptionsUi;
|
||||
parseOptionsUi.setUiModeImport(fileName);
|
||||
caf::PdmSettings::readFieldsFromApplicationStore(&parseOptionsUi);
|
||||
|
||||
caf::PdmUiPropertyViewDialog propertyDialog(NULL, &parseOptionsUi, "CSV Import Options", "");
|
||||
if (propertyDialog.exec() != QDialog::Accepted)
|
||||
|
Loading…
Reference in New Issue
Block a user