
พอดีว่า ผมกำลังซุ่มทำอะไรบางอย่างอยู่ ซึ่งต้องไปยุ่งกับเลขไทย แต่ปรากฏว่า ผมลองหาดูแล้ว int.Parse นั้น ไม่ยอมแปลงเลขไทย ครับ มันไม่ยอมเอา CultureInfo.NumberFormat.NativeNumbers มาใช้ ผมก็เลยต้องเขียนเองอีกแล้วดิ!
ฟังก์ชั่นก็ไม่ยากครับ ผมสร้าง Dictionary ขึ้นมาก่อน เอาไว้เก็บเทียบกันว่า ‘๑’ คือ 1 อะไรแบบนี้
Code Snippet
- private static Dictionary<char, char> _ThaiNativeDigits =
- ("?,?,?,?,?,?,?,?,?,?").Split(',').ToDictionary(s => s[0], s => (char)('0' + (s[0] - '?')));
- private static int ParseThaiNativeDigits( string input )
- {
- StringBuilder sb = new StringBuilder(input);
- for (int i = 0; i < sb.Length; i++)
- {
- sb
= _ThaiNativeDigits[sb
]; - }
-
- return int.Parse(sb.ToString());
- }
(เนื่องจากไอ้ตัว Plugin Paste โค๊ด มันไม่รับภาษาไทย (อีกแล้ว!!!) ตรงที่เป็น ????? คือ "๐,๑,๒,๓,๔,๕,๖,๗,๘,๙" ครับ และตรง s[0] – ‘?’ คือ s[0] – ‘๐’)
จากนั้น ผมก็เล่นง่ายๆ ครับ ลบเลขธรรมดา คือว่า ‘๙’ มันจะห่างจาก ‘๐’ 9 ตัวพอดีครับ ผมก็เลยเอามันมาลบกัน ( s[0] – ‘๐’) เพื่อออกมาเป็นตัวเลขก่อน จากนั้น ผมจะแปลงมันกลับเป็นเลขอารบิก ก็เลยต้องเอา ‘0’ บวกเข้าไป จากนั้น ก็แปลงค่าจาก int กลับเป็น char
ตัวอย่างเช่น
'๑' คือ 3665
’๐’ คือ 3664
3665 – 3664 = 1
และ ‘0’ คือ 48 ดังนั้น 48 + 1 = 49
ซึ่ง 49 ก็คือ ‘1’ นั่นเอง
เสร็จแล้ว ผมก็จับมันใส่ StringBuilder (รู้ไหมว่าทำไม???) แล้วก็แปลงแบบบ้านๆ เลย คือ Map จากเลขไทย เป็นเลขอารบิก แล้วก้อใช้ int.Parse อีกที แน่นอนว่า Function มันจะ Error ถ้าเกิดว่า มีข้อมูลที่ไม่ใช่เลขไทยนะครับ อันนี้ก็ต้องแก้ไขต่อกันเอง
แล้วเรื่องแปลกก็คือ เหอๆ แต่เชื่อหรือไม่ครับ ว่า คนที่ใช้ภาษาอารบิก ก็ดั๊น มีปัญหาเดียวกันเลย (เจอใน StackOverflow) เพราะเลขอารบิกของเขา มันเขียนไม่เหมือนของเราครับ เหอๆ (เขียนแบบ Aracib-indic)
