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
