22using namespace Qt::StringLiterals;
26QString QgsTextToFloatAlgorithm::name()
const
28 return u
"texttofloat"_s;
31QString QgsTextToFloatAlgorithm::displayName()
const
33 return QObject::tr(
"Text to float" );
36QString QgsTextToFloatAlgorithm::shortHelpString()
const
39 "This algorithm modifies the type of a given attribute in a vector layer, "
40 "converting a text attribute containing numeric strings into a numeric attribute.\n\n"
41 "Values containing a '%' symbol (e.g., '12.5%') will have the percentage sign removed "
42 "and will be converted to their decimal equivalent (e.g., 0.125).\n"
43 "Any non-numeric or invalid string values that cannot be parsed into a float will be "
48QString QgsTextToFloatAlgorithm::shortDescription()
const
50 return QObject::tr(
"Converts a text attribute containing numeric strings into a numeric attribute." );
53QStringList QgsTextToFloatAlgorithm::tags()
const
55 return QObject::tr(
"convert,string,number,double,cast,type" ).split(
',' );
58QString QgsTextToFloatAlgorithm::group()
const
60 return QObject::tr(
"Vector table" );
63QString QgsTextToFloatAlgorithm::groupId()
const
65 return u
"vectortable"_s;
68QString QgsTextToFloatAlgorithm::outputName()
const
70 return QObject::tr(
"Float from text" );
73QList<int> QgsTextToFloatAlgorithm::inputLayerTypes()
const
78QgsTextToFloatAlgorithm *QgsTextToFloatAlgorithm::createInstance()
const
80 return new QgsTextToFloatAlgorithm();
88bool QgsTextToFloatAlgorithm::supportInPlaceEdit(
const QgsMapLayer * )
const
93void QgsTextToFloatAlgorithm::initParameters(
const QVariantMap & )
96 fieldParam->setHelp( QObject::tr(
"Text/string field containing numeric values to convert. Supports standard numeric strings as well as formatted percentage strings." ) );
97 addParameter( fieldParam.release() );
102 QList<QgsField> fieldList = inputFields.
toList();
103 fieldList[mFieldIndex] =
QgsField( mFieldName, QMetaType::Type::Double, u
"Double"_s, 24, 15 );
111 mFieldName = parameterAsString( parameters, u
"FIELD"_s, context );
112 std::unique_ptr<QgsProcessingFeatureSource> source( parameterAsSource( parameters, u
"INPUT"_s, context ) );
115 mFieldIndex = source->fields().lookupField( mFieldName );
116 if ( mFieldIndex < 0 )
118 throw QgsProcessingException( QObject::tr(
"Field “%1” does not exist in input layer " ).arg( mFieldName ) );
127 QGS_MARK_ALGORITHM_SOURCE
131 const QVariant value = outFeature.
attribute( mFieldIndex );
136 QString stringValue = value.toString().trimmed();
137 if ( stringValue.endsWith(
'%' ) )
139 stringValue.chop( 1 );
140 double d = stringValue.toDouble( &ok );
143 outFeature.setAttribute( mFieldIndex, d / 100.0 );
148 double d = stringValue.toDouble( &ok );
151 outFeature.setAttribute( mFieldIndex, d );
158 outFeature.setAttribute( mFieldIndex, QVariant() );
@ Vector
Tables (i.e. vector layers with or without geometry). When used for a sink this indicates the sink ha...
@ String
Accepts string fields.
@ SkipGeometryValidityChecks
Invalid geometry checks should always be skipped. This flag can be useful for algorithms which always...
QFlags< ProcessingFeatureSourceFlag > ProcessingFeatureSourceFlags
Flags which control how QgsProcessingFeatureSource fetches features.
The feature class encapsulates a single feature including its unique ID, geometry and a list of field...
Q_INVOKABLE QVariant attribute(const QString &name) const
Lookup attribute value by attribute name.
Encapsulate a field in an attribute table or data source.
Container of fields for a vector layer.
QList< QgsField > toList() const
Utility function to return a list of QgsField instances.
Base class for all map layer types.
Contains information about the context in which a processing algorithm is executed.
Custom exception class for processing related exceptions.
Base class for providing feedback from a processing algorithm.
static bool isNull(const QVariant &variant, bool silenceNullWarnings=false)
Returns true if the specified variant should be considered a NULL value.
QList< QgsFeature > QgsFeatureList