我如何在文件制造商计算中的第一个字母之前提取数字部分?

问题描述 投票:0回答:0
I在Filemaker中有一个称为序列号的字段,我需要在删除前6个字符后提取出现在第一个字母(A-Z)之前的字符串的数字部分。

我期望的行为是:

从序列号中删除前6个字符。

在第一次出现字母(A-Z)之前提取数字部分。
    将提取的部分转化为一个数字。
  1. 例如:
  2. 序列号值:15266R16S12P2,结果应为16.
序列号值:12345p382m45,结果应为382。

我尝试使用带有位置的Let函数和最小的函数来找到第一个字母并提取数字,但是我遇到了计算无法正常工作的问题。 我认为最初会起作用的地方(
    我认为“ [A-Z]”是该位置函数的有效输入
  • ):
  • Middle ( Serial Number; 7; Position ( Serial Number; "[A-Z]" ; 7 ; 1 )- 7)
这里是我最近的尝试:

GetAsNumber ( Let ( [ stripped = Right( Serial Number ; Length( Serial Number ) - 6 ) ; firstLetterPos = Min( Position( stripped ; "A" ; 1 ; 1 ) ; Position( stripped ; "B" ; 1 ; 1 ) ; Position( stripped ; "C" ; 1 ; 1 ) ; ... ) ; firstLetterPos = If( firstLetterPos = 0 ; Length( stripped ) + 1 ; firstLetterPos ) ; numericPart = Left( stripped ; firstLetterPos - 1 ) ] ; GetAsNumber( numericPart ) ) )

问题:

仅当第二个字母是特定字母(例如a)并且无法正确处理其他字母或边缘案例的情况下,该计算才起作用。

我正在寻找什么:

我想在删除前6个字符后在第一个字母(A-Z)之前提取数字部分,然后将该部分转换为数字。有人可以帮助我纠正此计算或提出更好的方法吗?

    为您做这项工作吗?
  • Let ([ // test input. Put your real input here: ~serial = "12345P382M45" ; ~stripped = Right ( ~serial ; Length ( ~serial ) - 6 ) ; ~letter = Left ( Filter ( ~stripped ; "qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM" ) ; 1 ) ; ~pos = Position ( ~stripped ; ~letter ; 1 ; 1 ) ; // I'm not sure what you want to happen if there are no letters // but this will return EVERYTHING after the first 6 digits in // the absense of letters(~pos == 0) ~res = If ( ~pos > 0 ; Left ( ~stripped ; ~pos - 1 ) ; ~stripped ) ]; GetAsNumber ( ~res ) )

filter character numeric filemaker letter
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.