
โอกาสนี้จะมาแนะนำการจัด format ของเบอร์โทรมือถือนะครับ ซึ่งเป็น function ของฝรั่งเขา ผมเห็นว่าดีจึงเอามาให้ดูนะครับ
ปกติเบอร์โทรศัพท์ที่มันอยู่ติดกัน จะสร้างความลำบากในการอ่านและจดจำค่อนข้างมาก เช่น
0123456789
แต่ถ้าเปลี่ยนเป็นรูปแบบที่แยกออกจากกันแล้ว ก็จะสามารถดูและจดจำได้ง่ายมากขึ้น เช่น
012-345-6789
แต่ตอนเรากรอกข้อมูล เราไม่อยากจะเสียเวลาพิมพ์เครื่องหมาย - ก็ลองให้ function นี้จัดการให้แทนนะครับ ผมเขียน comment เป็นภาษาไทยให้ด้วยนะครับ จะได้เข้าใจง่ายๆ
ชื่อ Function : PhoneFormat รับ parameter เข้ามา 1 ตัวนะครับ
PhoneFormat ( InPhone )
Let([
InPhone = TextFontRemove ( TextFormatRemove ( InPhone ) ) ; // clear parameter ให้เรียบร้อย เผื่อไป copy มาจากที่อื่น
Digits = GetAsText( Filter( InPhone ; "1234567890" ) ) ; // คัดเอาเฉพาะตัวเลข
Cnt = Length( Digits ) ; // นับความยาวของตัวเลขที่คัดแล้ว
tx = "-" // กำหนดตัวแบ่ง จะเปลี่ยนเป็นเครื่องหมายอื่นก็ได้
];
Case(
// สร้างเงื่อนไขต่าง
Filter( Digits ; "0" ) = Digits ; TextColor( InPhone ; RGB( 255 ; 0 ; 0 ) ) ; // ถ้ากรอกเลข 0 มาทั้งหมด ก็ให้ใส่สีแดง
Cnt < 7 ; TextColor( InPhone ; RGB( 255 ; 0 ; 0 ) ) ; // ถ้าความยาวน้อยว่า 7 ก็ใส่สีแดงเช่นกัน
Cnt = 7 ; Left( Digits ; 3 ) & tx & Right( Digits ; 4 ) ; // ถ้าความยาว = 7 ก็ใช้ xxx-xxxx
Cnt = 8 ; TextColor( InPhone ; RGB( 255 ; 0 ; 0 ) ) ; // ถ้าความยาว = 8 ใส่สีแดง
Cnt = 9 ; TextColor( InPhone ; RGB( 255 ; 0 ; 0 ) ) ; // ถ้าความยาว = 9 ใส่มีแดง
Cnt = 10 ; Left( Digits ; 3 ) & tx & Middle( Digits ; 4 ;3 ) & tx & Right( Digits ; 4 ) ; // ถ้าความยาว = 10 ใช้ format xxx-xxx-xxxx
// ถ้าความยาวตั้งแต่ 11 ตัวขึ้นไป
Let([
Pre = Left( Digits ; Cnt - 10 ) ; // กำหนด ให้ Pre ได้อักษรตั้งแต่ตัวแรกทางซ้าย ไปถึง ความยาวทั้งหมด - 10
Pre = Case(
Left( Pre ; 3 ) = "011" ; Middle( Pre ; 4 ; 20 ) ;
Pre ) ; // ถ้าค่า Pre มันได้ 011 ก็ให้โยกไปอ่านค่า Pre ตำแหน่งที่ 4 เป็นต้นไป
CntPre = Length( Pre ) ; นับความยาวของค่า Pre
Post = Right( Digits ; 10 ) ; เก็บอักษรเริ่มตั้งแต่ทางขวาของค่า Digit ข้างบนโน่น จำนวน 10 ตัว
Post = Left( Post ; 3 ) & tx & Middle( Post ; 4 ;3 ) & tx & Right( Post ; 4 ) // แล้วทำการปรับ post ให้เป็น xxx-xxx-xxxx
];
// จากการกำหนดค่าด้านบน ก็เอามาคำนวณได้ว่า
Case(
CntPre <= 3 ; Pre & tx & Post ;
// ถ้า CntPre น้อยกว่าหรือเท่ากับ 3 ให้เอาค่า Pre คั่นด้วย - แล้วก็ค่า Post แต่ถ้ามันมากกว่า 3 ก็ให้ทำด้านล่าง
Left( Pre ; CntPre - 3 ) & tx & Right( Pre ; 3 ) & tx & Post
// เก็บค่าทางซ้ายของค่า Pre ไปเป็นจำนวน CntPre - 3 แล้วต่อด้วย - จากนั้นก็เก็บค่าทางขวาของ Pre อีก 3 ตัว แล้วก็คั่นด้วย - อีกที และตบท้ายด้วยค่า Post
)
)
)
)
ไปแปล script เขาแล้วอาจจะงงมากกว่าเก่าอีก เอาเป็นว่า Copy ไปใช้ได้เลยครับ ไม่ต้องคิดมาก เขาทำมาดีละ
ชอบก็ตามไปดูคนเขียนได้ที่
Richard DeShong
Logic Tools
http://logictools.com
InPhone = TextFontRemove ( TextFormatRemove ( InPhone ) ) ; // clear parameter ให้เรียบร้อย เผื่อไป copy มาจากที่อื่น
Digits = GetAsText( Filter( InPhone ; "1234567890" ) ) ; // คัดเอาเฉพาะตัวเลข
Cnt = Length( Digits ) ; // นับความยาวของตัวเลขที่คัดแล้ว
tx = "-" // กำหนดตัวแบ่ง จะเปลี่ยนเป็นเครื่องหมายอื่นก็ได้
];
Case(
// สร้างเงื่อนไขต่าง
Filter( Digits ; "0" ) = Digits ; TextColor( InPhone ; RGB( 255 ; 0 ; 0 ) ) ; // ถ้ากรอกเลข 0 มาทั้งหมด ก็ให้ใส่สีแดง
Cnt < 7 ; TextColor( InPhone ; RGB( 255 ; 0 ; 0 ) ) ; // ถ้าความยาวน้อยว่า 7 ก็ใส่สีแดงเช่นกัน
Cnt = 7 ; Left( Digits ; 3 ) & tx & Right( Digits ; 4 ) ; // ถ้าความยาว = 7 ก็ใช้ xxx-xxxx
Cnt = 8 ; TextColor( InPhone ; RGB( 255 ; 0 ; 0 ) ) ; // ถ้าความยาว = 8 ใส่สีแดง
Cnt = 9 ; TextColor( InPhone ; RGB( 255 ; 0 ; 0 ) ) ; // ถ้าความยาว = 9 ใส่มีแดง
Cnt = 10 ; Left( Digits ; 3 ) & tx & Middle( Digits ; 4 ;3 ) & tx & Right( Digits ; 4 ) ; // ถ้าความยาว = 10 ใช้ format xxx-xxx-xxxx
// ถ้าความยาวตั้งแต่ 11 ตัวขึ้นไป
Let([
Pre = Left( Digits ; Cnt - 10 ) ; // กำหนด ให้ Pre ได้อักษรตั้งแต่ตัวแรกทางซ้าย ไปถึง ความยาวทั้งหมด - 10
Pre = Case(
Left( Pre ; 3 ) = "011" ; Middle( Pre ; 4 ; 20 ) ;
Pre ) ; // ถ้าค่า Pre มันได้ 011 ก็ให้โยกไปอ่านค่า Pre ตำแหน่งที่ 4 เป็นต้นไป
CntPre = Length( Pre ) ; นับความยาวของค่า Pre
Post = Right( Digits ; 10 ) ; เก็บอักษรเริ่มตั้งแต่ทางขวาของค่า Digit ข้างบนโน่น จำนวน 10 ตัว
Post = Left( Post ; 3 ) & tx & Middle( Post ; 4 ;3 ) & tx & Right( Post ; 4 ) // แล้วทำการปรับ post ให้เป็น xxx-xxx-xxxx
];
// จากการกำหนดค่าด้านบน ก็เอามาคำนวณได้ว่า
Case(
CntPre <= 3 ; Pre & tx & Post ;
// ถ้า CntPre น้อยกว่าหรือเท่ากับ 3 ให้เอาค่า Pre คั่นด้วย - แล้วก็ค่า Post แต่ถ้ามันมากกว่า 3 ก็ให้ทำด้านล่าง
Left( Pre ; CntPre - 3 ) & tx & Right( Pre ; 3 ) & tx & Post
// เก็บค่าทางซ้ายของค่า Pre ไปเป็นจำนวน CntPre - 3 แล้วต่อด้วย - จากนั้นก็เก็บค่าทางขวาของ Pre อีก 3 ตัว แล้วก็คั่นด้วย - อีกที และตบท้ายด้วยค่า Post
)
)
)
)
ไปแปล script เขาแล้วอาจจะงงมากกว่าเก่าอีก เอาเป็นว่า Copy ไปใช้ได้เลยครับ ไม่ต้องคิดมาก เขาทำมาดีละ
ชอบก็ตามไปดูคนเขียนได้ที่
Richard DeShong
Logic Tools
http://logictools.com