หาตำแหน่งของข้อความย่อยในข้อความหลัก (0-indexed) โดยคืนค่า -1 หากไม่พบ
=Text.PositionOf(text as text, substring as text, optional occurrence as nullable number, optional comparer as nullable function) as any
=Text.PositionOf(text as text, substring as text, optional occurrence as nullable number, optional comparer as nullable function) as any
| Argument | Type | Required | Default | Description |
|---|---|---|---|---|
| text | text | Yes | ข้อความหลักที่ต้องการค้นหา | |
| substring | text | Yes | ข้อความย่อยที่ต้องการหาตำแหน่ง | |
| occurrence | number or Occurrence value | Optional | Occurrence.First | Occurrence.First (ค่าเริ่มต้น) = หาตำแหน่งแรก, Occurrence.Last = หาตำแหน่งสุดท้าย |
| comparer | function | Optional | Comparer.Ordinal (case-sensitive) | ฟังก์ชันสำหรับควบคุมการเปรียบเทียบ เช่น Comparer.Ordinal (case-sensitive), Comparer.OrdinalIgnoreCase (case-insensitive) |
Text.PositionOf("Hello, World!", "o")=Text.PositionOf("Hello, World!", "o")
4
Text.PositionOf("Hello, World!", "xyz")=Text.PositionOf("Hello, World!", "xyz")
-1
let Text = "apple apple apple", Position = Text.PositionOf(Text, "apple", Occurrence.Last) in Positionlet
Text = "apple apple apple",
Position = Text.PositionOf(Text, "apple", Occurrence.Last)
in
Position
12
let Text = "Hello World", Position = Text.PositionOf(Text, "HELLO", Occurrence.First, Comparer.OrdinalIgnoreCase) in Positionlet
Text = "Hello World",
Position = Text.PositionOf(Text, "HELLO", Occurrence.First, Comparer.OrdinalIgnoreCase)
in
Position
let FullText = "Name: John Doe", DelimiterPos = Text.PositionOf(FullText, ": "), Name = Text.Range(FullText, DelimiterPos + 2) in Namelet
FullText = "Name: John Doe",
DelimiterPos = Text.PositionOf(FullText, ": "),
Name = Text.Range(FullText, DelimiterPos + 2)
in
Name
"John Doe"
Text.Contains เพียงแล้วบอกว่าข้อความย่อยอยู่ในข้อความหรือไม่ (true/false) ส่วน Text.PositionOf บอกตำแหน่งที่แน่นอน ถ้าไม่พบ Text.PositionOf คืนค่า -1
ข้อความย่อยที่คุณค้นหาไม่พบในข้อความหลัก ลองตรวจสอบการสะกดและพิจารณาใช้ Comparer.OrdinalIgnoreCase หากต้องการค้นหาแบบไม่สนใจขนาดตัวอักษร
Index 0 คือตำแหน่งของตัวอักษรตัวแรก ดังนั้น Index 0 = ตัวแรก, Index 1 = ตัวที่สอง เป็นต้น (0-indexed system)
ปัจจุบัน Text.PositionOf รองรับเฉพาะ Occurrence.First และ Occurrence.Last หากต้องการตำแหน่งที่สองให้ใช้ Text.PositionOfAny หรือสร้าง Custom Function ด้วย List.FindIndex
Text.PositionOf ใช้สำหรับหาตำแหน่งแรก (หรือการเกิดขึ้นที่ระบุ) ของข้อความย่อย (substring) ภายในข้อความหลัก นับตำแหน่งจากตัวอักษรตัวแรก (Index 0)
ที่เจ๋งคือ ฟังก์ชันนี้รองรับการค้นหาแบบ case-sensitive หรือ case-insensitive ผ่านพารามิเตอร์ comparer ซึ่งทำให้คุณควบคุมพฤติกรรมการเปรียบเทียบได้ละเอียด
ส่วนตัวผม มักใช้ Text.PositionOf ร่วมกับ Text.Range เพื่อแยก (extract) ส่วนของข้อความจากตำแหน่งที่หาได้ นั่นคือการรวมกำลังของสองฟังก์ชันเข้าด้วยกัน 😎