Hi All I have requirement to get the values between square brackets iam achieving it with the help of extract function but when i was trying to insert the brackets after entering value and if my text value has uneven number of brackets it is erroring out
can you suggest is their any other alternate way to achieve this
Discussion posts and replies are publicly visible
That's a neat little parser. I would have probably just resorted to splitting the original string on "[", then checking the members of the resulting array for the presence of "]" (i.e. each having at least 1 and only 1), and handling from there.
Yeah, I'm not convinced...a true parser would ensure that every opening "[" had a corresponding "]". The "parser" above just ensures there's an even number, which isn't the same. Open to suggestions how to achieve a true parser here...?
Stewart Burchell said:Open to suggestions how to achieve a true parser here...?
It's hard to say, really - there are too many unanswered questions about what the source data might be, and those things are required in order to form the initial assumptions behind a robust parser. Without wasting the time actually trying, i'd guess it might be easier to make an exact one using regEx matching, though checking for potentially unlimited repeats can get pretty frustrating there.
a!localVariables( local!datacontent: fn!char( fn!code(ri!text) ), local!sum: a!forEach( items: local!datacontent, expression: a!match( value: fv!item, equals: "[", then: 1, equals: "]", then: - 1, default: 0 ),
), local!totalSum: fn!sum(local!sum), local!statusCode: if(local!totalSum = 0, 1, 0), local!result: union( if( local!totalSum = 0, fn!extract( ri!text, "[", "]" ), "" ), touniformstring({}) ), { if( local!statusCode = 1, "", "Number of open square brackets and close square brackets must be equal" ), if( a!forEach( items: local!result, expression: find("[", fv!item) ), "No square brackets is allowed between [ and ]", "" ) }) in addition to your solution just added find("[", fv!item) this to validation to prevent "[" in between open and close square brackets Thanks Stewart and Mike for you time and suggestion
extract()
Returns the value (or values, if the text contains multiple delimited values) between the delimiters from the given text.
extract( "name: Bob, name: Karen, name: Sam", ":", "," )
not sure what the point of this is - this doesn't have much to do with the error the user describes.
May be it make sense to the other person on how the exact() function works, because the the original post and subject mentions about extract() function.
Hi Stewart Burchell - Even if we have even number of "[" and "]" will it be only taking first combination of the same?
extract( "[This [is [the] Test] String]", "[", "]" )
nice try...