I think the only way to know ahead of time if the pattern string contains placeholders is to look for one (no need to count them all). Something like this:
#include <QtCore>
#include <QDebug>
{
QStringListIterator i(values);
while (i.hasNext() && result.contains(marker) > 0)
result = result.arg(i.next());
return result;
}
int main(int argc, char *argv[])
{
qDebug() << "Markers match values:" << dynamicReplace("%1 %2 %3", values);
qDebug() << "More values than markers:" << dynamicReplace("%1 %2", values);
qDebug() << "More markers than values:" << dynamicReplace("%1 %2 %3 %4", values);
values << "value inserts %1 marker or %2" << "D" << "E";
qDebug() << "Marker added on the fly:" << dynamicReplace("%1 %2 %3 %4", values);
return app.exec();
}
#include <QtCore>
#include <QDebug>
QString dynamicReplace(const QString &pattern, const QStringList &values)
{
static QRegExp marker("%\\d\\d?");
QString result = pattern;
QStringListIterator i(values);
while (i.hasNext() && result.contains(marker) > 0)
result = result.arg(i.next());
return result;
}
int main(int argc, char *argv[])
{
QCoreApplication app(argc, argv);
QStringList values = QStringList() << "A" << "B" << "C";
qDebug() << "Markers match values:" << dynamicReplace("%1 %2 %3", values);
qDebug() << "More values than markers:" << dynamicReplace("%1 %2", values);
qDebug() << "More markers than values:" << dynamicReplace("%1 %2 %3 %4", values);
values << "value inserts %1 marker or %2" << "D" << "E";
qDebug() << "Marker added on the fly:" << dynamicReplace("%1 %2 %3 %4", values);
return app.exec();
}
To copy to clipboard, switch view to plain text mode
Bookmarks