Position
目的
Returns the starting position of the specified occurrence of searchString in text.
格式
Position(text;searchString;start;occurrence)
參數
text – any text expression or text field
searchString – any text expression or text field representing the set of characters you want to find.
start – any numeric expression, or field containing a number, representing the number of characters from the start of the text string at which to begin the search.
occurrence – any numeric expression or field containing a number, representing which instance of the text string you want to find. A negative occurrence value causes the scan to go in the opposite direction from start. A zero value for occurrence is invalid and returns a result of zero.
用自己的話嘗試翻譯如下 >
Position(「文字」;「目標字元」;「從左邊第 m 個字元起算」;「第 n 次出現」)
對「文字」找「目標字元」,「從左邊第 m 個字元開始起算」「第 n 次出現」的「目標字元」,一直到「目標字元」出現,總共經過「幾個」字元
得到的資料格式
number
舉例
- Position(“Mississippi”;“iss”;1;1) returns 2.
- Position(“Mississippi”;“iss”;1;2) returns 5.
- Position(“Mississippi”;“iss”;3;1) returns 5.
- Left(Name;Position(Name;“ “;1;1)-1) returns William, when Name is a text field that contains William Smith.
- Right(Name;Length(Name) – Position(Name;“ “;Length(Name);-1)) returns Smith.
應用
應用在提取姓名,比如 Michel Jordan 這樣的姓名,利用姓名中間的 " " 空白鍵去定位「位置」,Position 函數會返回一個數字,藉此方便我們存取單獨的「姓」或「名」。
或者像是應用在 red_blue_green 這樣的文字資料,可以定位特殊符號的相對「位置」,方便提取特殊符號前後的文字。
容易出現的坑
說實話這個函數我看了好幾次才看懂,我在第 3 個例子一直卡關。
Position(“Mississippi”;“iss”;3;1)
找尋「第 1 次」出現的 “iss",但要從「第 3 個」字元 s 開始找,所以答案不是 2,也不是 3,而是 5。
不是2:如果參數是 Position(“Mississippi”;“iss”;1;1) 答案才是 2
不是3:我因為將 Mi 去掉,直接從黃色的 s 開始數,所以得到 3,這是錯誤的。應該還是要從 M 開始數才是正確。所以應該是,Mississippi 找尋「第 1 次」出現的 “iss",出現在第 5 個字元。
個人心得
一直看不懂的原因分析如下:
- 函數的使用方法並不熟悉
- 這個函數的 parameter 比較多,總共有四個。(理解起來比較困難)
- 這樣子的函數用法是第一次遇見
- 英文的說明,看了好幾次還是沒看懂
- 中文的說明幫助理解些函數用法的詞彙,比如 Occurrence 重複次數等等
- 最終還是依靠著紙筆一步一步拆解,用小範圍的概念去理解大的難題
- 真的不行就問朋友,不一定非得要是學習 FileMaker 的朋友,不同程式專長的朋友都有機會使用到函數,可能只是規則不同而已,所以「大膽詢問」可能是解決問題最快速的方法。