Skip to content
View in the app

A better way to browse. Learn more.

FMForums.com

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Patternsearch Non Numeric

Featured Replies

we need a way to search a string for the first non numeric character in a string. can someone help find the proper method to do that in FMP?

To get the first character that isn't 0-9 I would suggest:

left(

substitute(substitute(substitute(substitute(substitute(substitute(substitute(substitute(substitute(substitute(

tableName::fieldName

;"0";"")

;"1";"")

;"2";"")

;"3";"")

;"4";"")

;"5";"")

;"6";"")

;"7";"")

;"8";"")

;"9";"")

;1)

HOWEVER - if by "non-numeric" you mean the first character that is a letter A-Z, it would be neater to do this:

left(filter(tableName::fieldName;"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz");1)

Note that both filter and substitute are case-sensitive.

Best of luck

James

How about:

Left ( Filter ( YourField; "ABCDEFG" ) ; 1 )

Note, the Filter [color:blue] ABCDEFG would need to be expanded to include the whole alpabet, and include the lower case if needed.

HTH

Lee

p.s.

I missed your post, but support your second choice.

Edited by Guest
p.s.

  • Author

All the nested substitute function in james's post scare me! ;)

Id like to try the use the left(filter) approach. with that somehow also return the character value# of the string somehow?

I'm not sure what you mean by character value.

A = 1

B = 2

Z = 26

Or something else

Lee

  • Author

Sort of like pattern count. if the file name is

20070510_record.pdf

it would know that _ is the first non numeric character and it is the 9th character in the string.

This works:

Let (

X = Left ( Filter ( YourField; "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz., _" ) ; 1 )

; Position ( YourField ; X ; 1 ; 1 ) )

You do not need to nest your substitutes as such anymore.

You can simply use:


Substitute (field ; [0;""]; [1;""]; [2;""]; [3;""]; [4;""]; [5;""]; [6;""]; [7;""]; [8;""]; [9;""] )

Try something like this.


Let ( x = Left  ( Substitute (field ; [0;""]; [1;""]; [2;""]; [3;""]; [4;""]; [5;""]; [6;""]; [7;""]; [8;""]; [9;""] ); 1); 

        Case ( Length (x); x & " at character position " & Position ( field; x; 1; 1 ) )

      )

*Edit: Didnt see Lee's post

How about a custom function:

FirstNonNum:

If(Pos > Length(value); ""; If(IsEmpty(Filter(Middle(Value; Pos; 1); "0123456789")); Pos; FirstNonNum(Value; Pos + 1)))

This returns a number if a nonnumeric character is found, blank if none is.

David

Hi David.

Yes, a custom function would have been the first choice but he doesnt have advanced. ;)

  • Author

That looks interesting, and actually we do have advanced now i should update my profile, we recently got it.

Why a Custom Function?

I don't see a need for a CF in this case. This seems like a simple a one time need, and it can be handled with the built in Functions provided.

BTW, I'm not following T-Squared CF, it is unclear to me what goes in the POS, and Value.

Lee

Edited by Guest

Value is simply the source field; POS tracks where in the field you last looked, and the whole thing recursively runs through the string until a) a nonnumeric character is found, or ;) the end of the string occurs.

Perhaps it would be clearer:


FirstNonNum(Value, Pos)

Case(

  Pos > Length(value); ""; /* End of string reached */ 

  If(IsEmpty(Filter(Middle(Value; Pos; 1); "0123456789")); Pos; /* non-numeric char reached */ 

  FirstNonNum(Value; Pos + 1))/* repeat using next character starting point */

)

David

Edited by Guest

Hi David,

Yes, the Case Statement, and additional information, did it for me.

Thank you for posting it.

Lee

Create an account or sign in to comment

Important Information

By using this site, you agree to our Terms of Use.

Account

Navigation

Search

Search

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.