Thanks Nyall,
I figured it was that because I could place the string “Length” in a column.  I 
thought it would work in the field calculator with something like ‘“‘ || 
@thelenghtstring || ‘“‘ but obviously, it does not. 
Thank ps for the precision.

Nicolas Cadieux
https://gitlab.com/njacadieux

> Le 23 août 2021 à 19:02, Nyall Dawson <[email protected]> a écrit :
> 
> On Tue, 24 Aug 2021 at 03:53, Charles Dixon-Paver <[email protected]> 
> wrote:
>> 
>> Honestly I have no idea 😂
>> 
>> I mean, of course what is happening is QGIS is needing to identify a field 
>> from a text string, and it's even possible that with some convoluted chain 
>> of escape characters or funky regex the process could correct itself and 
>> "just work".
>> 
>> In all likelihood you could have just stumbled onto some obscure bug in the 
>> underlying processing API where the context of that field object get's 
>> dropped or orphaned when  trying to access it.
> 
> There's no bug here -- the variable value is just a pure text string,
> and the expression engine can't automatically guess that you actually
> want the value of the field with that name, and not just the name
> string itself. Hence the need for the attribute function, which allows
> you to retrieve a feature's fields via a text string containing the
> field name.
> 
> Nyall
> 
> 
>> 
>> My assumption is that using attribute() just compensates for whatever is 
>> going on under the hood by reinstantiating the context behind the field 
>> object, or at the very least provides a robust interface for referencing it 
>> ¯\_(ツ)_/¯
>> 
>> I would definitely call it a work around though
>> 
>>> On Mon, 23 Aug 2021 at 18:52, Nicolas Cadieux <[email protected]> 
>>> wrote:
>>> 
>>> Hi,
>>> 
>>> if(attribute(to_string( @NamelengthField )) != "LENGTH2", TRUE, FALSE )
>>> 
>>> ("LENGHT2" is an existing field and @NamelengthField was a model input 
>>> string.)
>>> 
>>> This worked  for me!   If you have the time, please explain why I needed 
>>> the attribute() function for this to work.  I looked in the documentation 
>>> and did not find it very clear.
>>> 
>>> Thanks a million you saved my butt!
>>> 
>>> Nicolas
>>> 
>>> 
>>>> On 2021-07-20 5:53 a.m., Charles Dixon-Paver wrote:
>>> 
>>> Hi Nicholas,
>>> 
>>> I haven't had time to dig into this extensively or encountered this 
>>> particular issue, but I would suggest trying to "force" the expression to 
>>> retrieve the correct info regardless of context using something like this:
>>> 
>>> with_variable('Length2',  to_string(@NamelengthField) || '2', 
>>> if(attribute(to_string(@NamelengthField)) != attribute(@Length2), TRUE, 
>>> FALSE))
>>> 
>>> That's probably an extreme example but hopefully it illustrates my point. 
>>> If you want to share a sample dataset/ model I can try to have a look at 
>>> how to resolve it.
>>> 
>>> Regards
>>> 
>>> On Tue, 20 Jul 2021 at 10:46, Richard McDonnell <[email protected]> 
>>> wrote:
>>>> 
>>>> Nicolas,
>>>> 
>>>> I have not looked at this in too much detail, but at a quick glance, could 
>>>> it not be the fact that you should be using the newly created fields? As 
>>>> in instead of @NamelengthField != @NamelengthField || '2', should it not 
>>>> be more like your previous example Length != Length2
>>>> 
>>>> 
>>>> 
>>>> Regards,
>>>> 
>>>> 
>>>> 
>>>> Richard
>>>> 
>>>> 
>>>> 
>>>> 
>>>> 
>>>> 
>>>> ——
>>>> Richard McDonnell MSc GIS, FME Certified Professional
>>>> FRM Data Management
>>>> 
>>>> ——
>>>> Oifig na nOibreacha Poiblí
>>>> Office of Public Works
>>>> 
>>>> Sráid Jonathan Swift, Baile Átha Troim, Co na Mí, C15 NX36
>>>> Jonathan Swift Street, Trim, Co Meath, C15 NX36
>>>> ——
>>>> M +353 87 688 5964 T +353 46 942 2409
>>>> https://gov.ie/opw
>>>> 
>>>> ——
>>>> To send me files larger than 30MB, please use the link below 
>>>> https://filetransfer.opw.ie/filedrop/[email protected]
>>>> 
>>>> Email Disclaimer: 
>>>> https://www.gov.ie/en/organisation-information/439daf-email-disclaimer/
>>>> 
>>>> From: Qgis-user <[email protected]> On Behalf Of Nicolas 
>>>> Cadieux
>>>> Sent: 20 July 2021 09:27
>>>> To: Qgis Users List <[email protected]>
>>>> Subject: Re: [Qgis-user] Problem using Model Inputs variable in an Select 
>>>> by expression in the model Designer
>>>> 
>>>> 
>>>> 
>>>> Hi,
>>>> 
>>>> Does anyone have an idea?
>>>> 
>>>> Nicolas Cadieux
>>>> 
>>>> https://gitlab.com/njacadieux
>>>> 
>>>> 
>>>> 
>>>> Le 8 juill. 2021 à 01:17, Nicolas Cadieux <[email protected]> a 
>>>> écrit :
>>>> 
>>>> 
>>>> 
>>>> Hi,
>>>> 
>>>> I am creating a model that fixes Network files before they are used in the 
>>>> QGIS Network analysis (Shortest path) tools.
>>>> 
>>>> This is my work flow:
>>>> 
>>>> Create a "Length" field (value) and calculate $length in the field 
>>>> calculator
>>>> Split the Multipart lines into Singlepart lines
>>>> Create a "Length2" field (value) and calculate $length in the field 
>>>> calculator
>>>> Select by expression Length != Length2.  This basically gives me a 
>>>> selection of line that have been modified by the Multipart to Singlepart 
>>>> algorithm. (I get 8 results)
>>>> 
>>>> This works well
>>>> 
>>>> The problem is when I create and Input String to let the user create a 
>>>> "Length" field.  This become a variable called @NamelengthField. My work 
>>>> flow become:
>>>> 
>>>> User input "Length" in the Model input. (@NamelengthField)
>>>> Create a "Length" field using  @NamelengthField (as pre-calculated value) 
>>>> and calculate $length in the field calculator: This is OK
>>>> Split the Multipart lines into Singlepart lines: This is OK
>>>> Create a "Length2" field using  @NamelengthField ||'2'  (as pre-calculated 
>>>> value) and calculate $length in the field calculator: This is OK this 
>>>> field (Length2) is created and calculated properly.
>>>> I get stuck  when I try Select by expression using  @NamelengthField != 
>>>> @NamelengthField || '2' (as pre-calculated value) (I get all lines back) 
>>>> and the test does not work.
>>>> 
>>>> I tried stuff like
>>>> 
>>>> @NamelengthField != (@NamelengthField || '2')
>>>> 
>>>> '@NamelengthField != @NamelengthField || '2''
>>>> 
>>>> "@NamelengthField != @NamelengthField || '2'"
>>>> 
>>>> "@NamelengthField"|| !=|| "@NamelengthField || '2'"
>>>> 
>>>> Even simple @NamelengthField = 5.286365157529550 (which should extract 
>>>> exactly one value).
>>>> 
>>>> Any ideas?
>>>> 
>>>> Nicolas
>>>> 
>>>> QGIS 3.18.2 on Windows 10
>>>> 
>>>> 
>>>> 
>>>> 
>>>> 
>>>> 
>>>> 
>>>> --
>>>> 
>>>> Nicolas Cadieux
>>>> 
>>>> https://gitlab.com/njacadieux
>>>> 
>>>> _______________________________________________
>>>> Qgis-user mailing list
>>>> [email protected]
>>>> List info: https://lists.osgeo.org/mailman/listinfo/qgis-user
>>>> Unsubscribe: https://lists.osgeo.org/mailman/listinfo/qgis-user
>>> 
>>> --
>>> Nicolas Cadieux
>>> https://gitlab.com/njacadieux
>> 
>> _______________________________________________
>> Qgis-user mailing list
>> [email protected]
>> List info: https://lists.osgeo.org/mailman/listinfo/qgis-user
>> Unsubscribe: https://lists.osgeo.org/mailman/listinfo/qgis-user
_______________________________________________
Qgis-user mailing list
[email protected]
List info: https://lists.osgeo.org/mailman/listinfo/qgis-user
Unsubscribe: https://lists.osgeo.org/mailman/listinfo/qgis-user

Reply via email to