Use lambda functions and simplify createSummaryCasesFromFiles

This commit is contained in:
Magne Sjaastad committed 2025-05-12 13:04:10 +02:00
1 parent f708ac96f2
commit 3c5221236a
8 files changed
+48 -46

No files matched your search

@@ -36,12 +36,12 @@ namespace RiaEnsembleImportTools
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
std::pair<bool, std::vector<RimSummaryCase*>> createSummaryCasesFromFiles( const QStringList& fileNames, CreateConfig createConfig )
std::vector<RimSummaryCase*> createSummaryCasesFromFiles( const QStringList& fileNames, CreateConfig createConfig )
{
RimSummaryCaseMainCollection* sumCaseColl = RiaSummaryTools::summaryCaseMainCollection();
if ( !sumCaseColl ) return {};
std::vector<RimSummaryCase*> newCases;
if ( !sumCaseColl ) return std::make_pair( false, newCases );
std::vector<RifSummaryCaseFileResultInfo> importFileInfos;
if ( createConfig.fileType == RiaDefines::FileType::SMSPEC )
@@ -79,7 +79,7 @@ std::pair<bool, std::vector<RimSummaryCase*>> createSummaryCasesFromFiles( const
newCases.insert( newCases.end(), sumCases.begin(), sumCases.end() );
}
return std::make_pair( true, newCases );
return newCases;
}
//--------------------------------------------------------------------------------------------------
@@ -89,24 +89,30 @@ std::pair<QString, QString> findPathPattern( const QStringList& filePaths, const
{
if ( filePaths.isEmpty() ) return {};
std::vector<std::vector<int>> tableOfNumbers;
QRegularExpression numberRegex( "\\d+" );
for ( const auto& f : filePaths )
auto getTableOfNumbers = []( const QStringList& filePaths, const QRegularExpression& expression ) -> std::vector<std::vector<int>>
{
std::vector<int> valuesInString;
auto matchIterator = numberRegex.globalMatch( f );
while ( matchIterator.hasNext() )
std::vector<std::vector<int>> tableOfNumbers;
for ( const auto& f : filePaths )
{
auto match = matchIterator.next();
QString number = match.captured( 0 );
std::vector<int> valuesInString;
auto matchIterator = expression.globalMatch( f );
while ( matchIterator.hasNext() )
{
auto match = matchIterator.next();
QString number = match.captured( 0 );
valuesInString.push_back( number.toInt() );
valuesInString.push_back( number.toInt() );
}
tableOfNumbers.push_back( valuesInString );
}
tableOfNumbers.push_back( valuesInString );
}
return tableOfNumbers;
};
auto tableOfNumbers = getTableOfNumbers( filePaths, numberRegex );
if ( tableOfNumbers.empty() ) return {};
const auto valuesFirstRow = tableOfNumbers[0];
@@ -239,33 +245,30 @@ QStringList createPathsBySearchingFileSystem( const QString& pathPattern, const
{
basePath = basePath.left( realizationPos );
}
QStringList matchingFiles;
// Replace placeholder string with a regex pattern to capture numbers
QString regexPattern = pathPattern;
regexPattern.replace( placeholderString, "(\\d+)" );
QRegularExpression regex( regexPattern );
// Use QDirIterator to traverse the directory recursively
QDirIterator it( basePath, QDir::Files, QDirIterator::Subdirectories );
while ( it.hasNext() )
auto getMatchingFiles = []( const QString& basePath, const QString& regexPattern ) -> QStringList
{
QString filePath = it.next();
QStringList filePaths;
QRegularExpression regex( regexPattern );
QRegularExpressionMatch match = regex.match( filePath );
if ( match.hasMatch() )
// Use QDirIterator to traverse the directory recursively
QDirIterator it( basePath, QDir::Files, QDirIterator::Subdirectories );
while ( it.hasNext() )
{
QString index1 = match.captured( 1 );
QString index2 = match.captured( 2 );
if ( index1 == index2 )
QString filePath = it.next();
if ( regex.match( filePath ).hasMatch() )
{
matchingFiles << filePath;
filePaths << filePath;
}
}
}
return filePaths;
};
auto matchingFiles = getMatchingFiles( basePath, regexPattern );
// Sort files by realization number
std::sort( matchingFiles.begin(),
@@ -32,7 +32,7 @@ struct CreateConfig
bool ensembleOrGroup;
bool allowDialogs;
};
std::pair<bool, std::vector<RimSummaryCase*>> createSummaryCasesFromFiles( const QStringList& fileNames, CreateConfig createConfig );
std::vector<RimSummaryCase*> createSummaryCasesFromFiles( const QStringList& fileNames, CreateConfig createConfig );
std::pair<QString, QString> findPathPattern( const QStringList& filePaths, const QString& placeholderString );
QStringList createPathsFromPattern( const QString& basePath, const QString& numberRange, const QString& placeholderString );
@@ -125,9 +125,8 @@ RimSummaryEnsemble* RicImportEnsembleFeature::importSingleEnsemble( const QStrin
if ( ensembleName.isEmpty() ) return nullptr;
RiaEnsembleImportTools::CreateConfig createConfig{ .fileType = fileType, .ensembleOrGroup = true, .allowDialogs = true };
auto [isOk, cases] = RiaEnsembleImportTools::createSummaryCasesFromFiles( fileNames, createConfig );
if ( !isOk || cases.empty() ) return nullptr;
auto cases = RiaEnsembleImportTools::createSummaryCasesFromFiles( fileNames, createConfig );
if ( cases.empty() ) return nullptr;
RimSummaryEnsemble* ensemble = RicImportEnsembleFeature::groupSummaryCases( cases, ensembleName, groupingMode, true );
@@ -76,8 +76,8 @@ void RicImportSummaryCasesFeature::onActionTriggered( bool isChecked )
if ( fileNames.isEmpty() ) return;
RiaEnsembleImportTools::CreateConfig createConfig{ .fileType = fileType, .ensembleOrGroup = false, .allowDialogs = true };
auto [isOk, cases] = createSummaryCasesFromFiles( fileNames, createConfig );
if ( !isOk ) return;
auto cases = createSummaryCasesFromFiles( fileNames, createConfig );
if ( !cases.empty() ) return;
addSummaryCases( cases );
if ( !cases.empty() )
@@ -125,8 +125,8 @@ std::pair<bool, std::vector<RimSummaryCase*>> RicImportSummaryCasesFeature::crea
RiaGuiApplication* app = RiaGuiApplication::instance();
RiaEnsembleImportTools::CreateConfig createConfig{ .fileType = RiaDefines::FileType::SMSPEC, .ensembleOrGroup = false, .allowDialogs = true };
auto [isOk, cases] = RiaEnsembleImportTools::createSummaryCasesFromFiles( fileNames, createConfig );
if ( isOk )
auto cases = RiaEnsembleImportTools::createSummaryCasesFromFiles( fileNames, createConfig );
if ( !cases.empty() )
{
addSummaryCases( cases );
if ( !cases.empty() && doCreateDefaultPlot )
@@ -49,7 +49,7 @@ void RicImportSummaryGroupFeature::onActionTriggered( bool isChecked )
RiaDefines::FileType fileType = RicRecursiveFileSearchDialog::mapSummaryFileType( result.fileType );
RiaEnsembleImportTools::CreateConfig createConfig{ .fileType = fileType, .ensembleOrGroup = true, .allowDialogs = true };
auto [isOk, cases] = RiaEnsembleImportTools::createSummaryCasesFromFiles( fileNames, createConfig );
auto cases = RiaEnsembleImportTools::createSummaryCasesFromFiles( fileNames, createConfig );
RicImportSummaryCasesFeature::addSummaryCases( cases );
RicImportEnsembleFeature::groupSummaryCases( cases, "", RiaDefines::EnsembleGroupingMode::FMU_FOLDER_STRUCTURE, false );
@@ -63,8 +63,8 @@ void RicReplaceSummaryEnsembleFeature::onActionTriggered( bool isChecked )
if ( fileType != RiaDefines::FileType::SMSPEC ) return;
RiaEnsembleImportTools::CreateConfig createConfig{ .fileType = fileType, .ensembleOrGroup = false, .allowDialogs = false };
auto [isOk, newCases] = RiaEnsembleImportTools::createSummaryCasesFromFiles( fileNames, createConfig );
if ( !isOk || newCases.empty() )
auto newCases = RiaEnsembleImportTools::createSummaryCasesFromFiles( fileNames, createConfig );
if ( newCases.empty() )
{
RiaLogging::warning( "No new cases are created." );
return;
@@ -288,8 +288,8 @@ void RicSummaryPlotFeatureImpl::createSummaryPlotsFromArgumentLine( const QStrin
RiaEnsembleImportTools::CreateConfig createConfig{ .fileType = RiaDefines::FileType::SMSPEC,
.ensembleOrGroup = isEnsembleMode,
.allowDialogs = true };
auto [isOk, summaryCasesToUse] = RiaEnsembleImportTools::createSummaryCasesFromFiles( summaryFileNames, createConfig );
if ( !isOk || summaryCasesToUse.empty() )
auto summaryCasesToUse = RiaEnsembleImportTools::createSummaryCasesFromFiles( summaryFileNames, createConfig );
if ( summaryCasesToUse.empty() )
{
RiaLogging::error( "Needs at least one summary case to create a plot." );
return;
@@ -74,8 +74,8 @@ caf::PdmObjectHandle* RimProject_importSummaryCase::execute()
QStringList summaryFileNames{ absolutePath };
RiaEnsembleImportTools::CreateConfig createConfig{ .fileType = RiaDefines::FileType::SMSPEC, .ensembleOrGroup = false, .allowDialogs = false };
auto [isOk, newCases] = RiaEnsembleImportTools::createSummaryCasesFromFiles( summaryFileNames, createConfig );
if ( isOk )
auto newCases = RiaEnsembleImportTools::createSummaryCasesFromFiles( summaryFileNames, createConfig );
if ( !newCases.empty() )
{
RicImportSummaryCasesFeature::addSummaryCases( newCases );