CSV Parser: use cell separator when determining layout type.

This commit is contained in:
Kristian Bendiksen committed 2025-10-17 07:52:42 +02:00
1 parent dddb206dc4
commit 4a4941f759
4 files changed
+7 -6

No files matched your search

@@ -200,7 +200,7 @@ void RicPasteAsciiDataToSummaryPlotFeatureUi::setUiModeImport( const QString& fi
{
m_parser = std::unique_ptr<RifCsvUserDataParser>( new RifCsvUserDataFileParser( fileName ) );
if ( m_parser->determineCsvLayout() != RifCsvUserDataParser::LineBased )
if ( m_parser->determineCsvLayout( mapCellSeparator( m_cellSeparator() ) ) != RifCsvUserDataParser::LineBased )
{
m_uiMode = UI_MODE_IMPORT;
initialize( m_parser.get() );
@@ -38,6 +38,7 @@ public:
, assumeNumericDataColumns( false )
, curveSymbolSkipDistance( 0.0f )
, defaultCategory( RifEclipseSummaryAddressDefines::SummaryCategory::SUMMARY_INVALID )
, cellSeparator( ";" )
{
}
@@ -83,7 +83,7 @@ std::expected<void, QString> RifCsvUserDataParser::parse( const RifAsciiDataPars
const std::map<QString, QString>& nameMapping,
const std::map<QString, std::pair<QString, double>>& unitMapping )
{
if ( determineCsvLayout() == LineBased )
if ( determineCsvLayout( parseOptions.cellSeparator ) == LineBased )
return parseLineBasedData( parseOptions );
else
return parseColumnBasedData( parseOptions, nameMapping, unitMapping );
@@ -273,7 +273,7 @@ QStringList RifCsvUserDataParser::timeColumnPreviewData( int lineCount, const Ri
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
RifCsvUserDataParser::CsvLayout RifCsvUserDataParser::determineCsvLayout()
RifCsvUserDataParser::CsvLayout RifCsvUserDataParser::determineCsvLayout( const QString& cellSeparator )
{
auto streamResult = openDataStream();
if ( !streamResult ) return LineBased;
@@ -286,7 +286,7 @@ RifCsvUserDataParser::CsvLayout RifCsvUserDataParser::determineCsvLayout()
QString firstLine = dataStream->readLine();
if ( firstLine.isEmpty() ) continue;
headers = RifFileParseTools::splitLineAndTrim( firstLine, ";" );
headers = RifFileParseTools::splitLineAndTrim( firstLine, cellSeparator );
if ( headers.size() < 3 || headers.size() > 5 ) continue;
break;
@@ -610,7 +610,7 @@ std::expected<void, QString> RifCsvUserDataParser::parseLineBasedData( const Rif
QString line = dataStream->readLine();
if ( line.trimmed().isEmpty() ) continue;
QStringList dataItems = RifFileParseTools::splitLineAndTrim( line, ";" );
QStringList dataItems = RifFileParseTools::splitLineAndTrim( line, parseOptions.cellSeparator );
if ( dataItems.size() < 3 || dataItems.size() > 5 ) continue;
if ( !headerFound )
@@ -62,7 +62,7 @@ public:
QString previewText( int lineCount, const RifAsciiDataParseOptions& parseOptions );
QStringList timeColumnPreviewData( int lineCount, const RifAsciiDataParseOptions& parseOptions );
CsvLayout determineCsvLayout();
CsvLayout determineCsvLayout( const QString& cellSeparator );
QString tryDetermineCellSeparator();
QString tryDetermineDecimalSeparator( const QString& cellSeparator );