Wednesday, November 13, 2019

5:42 PM


โอกาสนี้จะมาแนะนำการจัด 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

บทความอื่นๆ