 |
|
VB.NET(มือใหม่) - ต้องการแปลงตัวเลขกับอักษรภาษาอังกฤษเป็นคำอ่านภาษาไทยครับ |
|
 |
|
|
 |
 |
|
https://www.nuget.org/packages/ThaiBahtText/
https://github.com/greatfriends/ThaiBahtText
รายละเอียดอยู่ใน github ครับ
|
 |
 |
 |
 |
Date :
2015-06-13 23:07:36 |
By :
deksoke |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ขอบคุณครับ จะลองศึกษาดูครับ
ถ้ายังไม่เข้าใจจะมาขอปรึกษาใหม่นะครับ

|
 |
 |
 |
 |
Date :
2015-06-14 00:06:23 |
By :
little1983 |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
Code (VB.NET)
Public Class Form1
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim ArrInput As Char() = TextBox1.Text
Dim i As Integer
Dim ArrOutput(100)
For i = 0 To ArrInput.Length - 1
Select Case ArrInput(i)
Case "0" : ArrOutput(i) = "๐"
Case "1" : ArrOutput(i) = "๑"
Case "2" : ArrOutput(i) = "๒"
Case "3" : ArrOutput(i) = "๓"
Case "4" : ArrOutput(i) = "๔"
Case "5" : ArrOutput(i) = "๕"
Case "6" : ArrOutput(i) = "๖"
Case "7" : ArrOutput(i) = "๗"
Case "8" : ArrOutput(i) = "๘"
Case "9" : ArrOutput(i) = "๙"
Case "A", "a" : ArrOutput(i) = "เอ"
Case "B", "b" : ArrOutput(i) = "บี"
Case "C", "c" : ArrOutput(i) = "ซี"
Case "D", "d" : ArrOutput(i) = "ดี"
Case "E", "e" : ArrOutput(i) = "อี"
Case "F", "f" : ArrOutput(i) = "เอฟ"
Case "G", "g" : ArrOutput(i) = "จี"
Case Else : ArrOutput(i) = "*"
End Select
Next
TextBox2.Text = String.Join("", ArrOutput)
End Sub
End Class
|
 |
 |
 |
 |
Date :
2015-06-14 05:54:11 |
By :
หน้าฮี |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ตัวอย่างสำหรับผู้มีความพยายาม
*****
***** Delegate & Regx
*****
*****
Code (VB.NET)
Imports System.Text.RegularExpressions
Public Class Form1
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim xxx = New RegularExpressions.Regex("[0-9a-z]").Replace("987aaa", New RegularExpressions.MatchEvaluator(AddressOf yyy))
'ผลลัพธ์ ๙๘๗อ้าอ้าอ้า
End Sub
Private Function yyy(ByVal m As RegularExpressions.Match) As String
Dim strArr() As String = {"๐", "๑", "๒", "๓", "๔", "๕", "๖", "๗", "๘", "๙", "อ้า", "ขา"}
Dim result As string = strArr(If(m.Value = "a", 10, m.Value))
Return result
End Function
End Class
|
 |
 |
 |
 |
Date :
2015-06-14 07:40:33 |
By :
หน้าฮี |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ตัวอย่างสำหรับผู้มีความพยายาม
*****
***** Lambda& Regx
*****
*****
Code (VB.NET)
Imports System.Text.RegularExpressions
Public Class Form1
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim xxx = New RegularExpressions.Regex("[0-9a-z]").Replace("987aaa", New RegularExpressions.MatchEvaluator(Function(m) {"๐", "๑", "๒", "๓", "๔", "๕", "๖", "๗", "๘", "๙", "อ้า", "ขา"}(If(m.Value = "a", 10, m.Value))))
'ผลลัพธ์ ๙๘๗อ้าอ้าอ้า
End Sub
End Class
ปล. ไม่มีเก่าไม่มีใหม่ มีแต่ใหญ่หรือว่าเล็กเท่านั้น
|
 |
 |
 |
 |
Date :
2015-06-14 07:51:44 |
By :
หน้าฮี |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ขอบคุณมากเลยครับ ทำได้แล้วครับ
รบกวนอีกรอบครับ ช่วยอธิบายโค๊ด Delegate & Regx กับ Lambda& Regx ให้หน่อยได้มั้ยครับ
ผมอ่านแล้วไม่แน่ใจว่าตัวเอง เข้าใจถูกต้องหรือเปล่าครับ
ปล.ส่วนเรื่องกระถินก็ไม่เข้าใจเหมือนกันครับ อิอิ 
|
 |
 |
 |
 |
Date :
2015-06-14 08:40:30 |
By :
little1983 |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ผมไม่เชี่ยวเรื่อง regx กับ lambada ใน vb มากเลยครับถึงผมจะเขียนด้วย vb เป็นส่วนใหญ่ก็เหอะ ยังไงคุณหน้าฮีลองสอนหน่อยดิ (อ่านโค้ดออกครับ แต่ไม่เข้าใจเรื่องการนำไปใช้งานมากกว่า)
เรื่องยอดกระถินผมเข้าใจนะ ผมไม่ใช่โปรแกรมเมอร์แต่น่าจะเป็นเดเวลอปเปอร์มากกว่า 55+
|
 |
 |
 |
 |
Date :
2015-06-14 09:48:37 |
By :
deksoke |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
System.Text.RegularExpressions
Code (VB.NET)
Regex.IsMatch("ห", "[a-z]") เท็จ
Regex.IsMatch("อี", "[a-z]") เท็จ
Regex.IsMatch("c", "[a-b]") เท็จ
Regex.IsMatch("b", "[a-b]") จริง
Regex.IsMatch("B", "[a-b]") เท็จ
Regex.IsMatch("B", "[a-bA-B]") จริง
Regex.IsMatch("6", "[0-9a-bA-B]") จริง
ASC("a") = 97
ASC("A") = 65
(97 - 87) = 10 ('a' --> 10)
(98 - 87) = 11 ('b' --> 11)
(99 -87) = 12 ('c' --> 12)
Code (VB.NET)
Imports System.Text.RegularExpressions
Public Class Form1
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim xxx = New RegularExpressions.Regex("[0-9a-c]").Replace("987azbc", New RegularExpressions.MatchEvaluator(Function(m) {"๐", "๑", "๒", "๓", "๔", "๕", "๖", "๗", "๘", "๙", "อ้า", "ขา", "ให้ดูหน่อยซิ"}(If(Regex.IsMatch(m.Value, "[a-z]"), Asc(m.Value) - 87, m.Value))))
'ผลลัพธ์ ๙๘๗อ้าzขาให้ดูหน่อยซิ
End Sub
End Class
ผลลัพธ์ --> ๙๘๗อ้าzขาให้ดูหน่อยซิ
|
 |
 |
 |
 |
Date :
2015-06-14 10:14:34 |
By :
หน้าฮี |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
Code (VB.NET)
Imports System.Text.RegularExpressions
Public Class Form1
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim xxx = New RegularExpressions.Regex("[0-9a-c]").Replace("987azbc", New RegularExpressions.MatchEvaluator(Function(m) {"๐", "๑", "๒", "๓", "๔", "๕", "๖", "๗", "๘", "๙", "อ้า", "ขา", "ให้ดูหน่อยซิ"}(If(Regex.IsMatch(m.Value, "[a-z]"), Asc(m.Value) - 87, m.Value))))
'ผลลัพธ์ ๙๘๗อ้าzขาให้ดูหน่อยซิ
End Sub
End Class
RegX (Regular Expression) เป็นตัวกำหนดเงื่อนไขตรวจสอบว่า "ตรวจสอบกับพยัญชนะอะไรบ้าง"
จากตัวอย่างกำหนดขอบเขตการตรวจสอบว่า [0-9a-c] จะหมายถึงเลขศูนย์ถึงเลขเก้าและตัวอักษรเอถึงซี
MatchEvaluator เป็นตัวจับคู่ค่าที่รับเข้ามา ("987azbc") แล้วคืนค่าเป็นตัวเลขหรืออักษรภาษาไทย
โดยการจับคู่จะเรียงลำดับตามขอบเขตการตรวจสอบของ Regular Expression หรือ [0-9a-c] นั่นเอง
การจับคู่จะเรียงตามการประกาศขอบเขต [0-9a-c] เพราะงั้นจึงเรียง ศูนย์ หนึ่ง สอง สาม สี่ ... เอ บี ซี (แต่ abc คุณหน้าฮีแทนค่าตัว อ้า ขา ให้ดูหน่อยสิ)
ใน MatchEvaluator ยังมีเงื่อนไขการจับคู่อีกอย่างโดยตรวจสอบก่อนแล้วค่อยจับคู่คือ (If(Regex.IsMatch(m.Value, "[a-z]"), Asc(m.Value) - 87, m.Value)))
ตรวจสอบว่าตัวแปรที่รับเข้ามาเข้าข่าย a-z ไหม
ถ้าใช่ แปลงเป็น charactor code - 87 (abc จับคู่ถูกต้องแต่ z จับคู่ไม่ได้เพราะอยู่นอกขอบเขตหรือตัวอักษรไทยสำหรับจับคู่มีถึงแค่ c)
ถ้าไม่ใช่ เอาไปจับคู่ได้เลย (ถ้าเข้ามาเงื่อนไขนี้แปลว่าตัวแปรที่รับเข้ามาเป็นตัวเลข หรือ สัญลักษณ์อื่นแล้ว)
ผมเจอจุดที่น่าจะเป็นบัคนะครับ หากผู้ใช้กรอกเป็นสัญลักษณ์ */!@#$%^&*()_+\/><?., ตัวจับคู่จะแสดงออกมาอย่างไร
ที่ผมเข้าใจคร่าวๆจะประมาณนี้ครับ ถูกต้องไหมครับ
อ้างอิงจาก
https://msdn.microsoft.com/en-us/library/system.text.regularexpressions.matchevaluator(v=vs.110).aspx
https://msdn.microsoft.com/en-us/library/x9kb82hd(v=vs.110).aspx
|
 |
 |
 |
 |
Date :
2015-06-14 11:50:30 |
By :
deksoke |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ง่ะ ผมเพิ่งมองออกอีกอย่างคือ Function(m) ไมได้จับคู่อะไรหรอกเป็นแค่การอ้างตำแหน่งใน Array เท่านั้นเอง
คุณหน้าฮีตรวจสอบว่าเป็นตัวอักษรแล้วแปลงเป็น asc - 87 เพื่ออ้างตำแหน่งใน array ให้ถูกต้องเท่านั้นเอง (ตัวอักษรเริ่มที่ 10)
เพราะเขียน inline นั่นแหละคนอ่านโค้ดเลยลำบาก 555+
ยังไงก็ขอบคุณครับที่ยกตัวอย่างมาให้คิด อิอิ
|
 |
 |
 |
 |
Date :
2015-06-14 11:57:59 |
By :
deksoke |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
จาก #NO 11
Function(m) ขอบเขตตัวแปร m คือ {a หรือ b หรือ c}
เพราะฉะนั้น ค่าที่ส่งเข้า If(Regex.IsMatch(m.Value, "[a-z]") === If(Regex.IsMatch(m.Value, "[a-c]")
โดยปริยาย
จาก #NO 11 --> การประยุกต์ใช้งาน Lambda
Function(m) === Function(หอยหอม) หรือ m=หอยหอม
Code (JavaScript)
<script type="text/javascript">
var left_sidebar_menu = [
{ 'page': '/DEMO/GL_MainMenu_V1001', 'id': 'ctl00_lbtnGL' },
{ 'page': '/DEMO/GS_MainMenu_V1001', 'id': 'ctl00_lbtnGS' },
{ 'page': '/DEMO/AR_MainMenu_V1001', 'id': 'ctl00_lbtnAR' },
{ 'page': '/DEMO/AP_MainMenu_V1001', 'id': 'ctl00_lbtnAP' }
];
//JQuery Load DOM Ready === AJAX Extenstions pageLoad()
$(function () {
var results = left_sidebar_menu.filter(function (หอยหอม) { return หอยหอม.page == location.pathname });
try {
if (results.length > 0) {
$('#' + results[0].id).parent().addClass('active');
}
} catch (e) {
//ignore เพราะหอยหอม
}
});
</script>
|
 |
 |
 |
 |
Date :
2015-06-14 13:02:14 |
By :
หน้าฮี |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
สวรรค์อยู่ทางนี้

นรกอยู่ทางนี้

ปล. ภาพประกอบเพื่อความเข้าใจ "คุณจะไปทางไหน?" เท่านั้น
|
 |
 |
 |
 |
Date :
2015-06-14 13:53:41 |
By :
หน้าฮี |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
โหดอ่ะ 555+ ชอบมากครับกับคำสั่งใน jquery ทดสอบแล้วคืนค่าได้ดีแถมบรรทัดเขียนก็น้อยลงไปเยอะมากๆ
ผมไม่ค่อยเขียนแบบนี้เพราะด้วยเหตุผลที่ผมอ่านมันไม่ออก และผมทำให้คนมาทำต่ออ่านไม่อออกด้วย 555+
ขอบคุณสำหรับความรู้ครับ
|
 |
 |
 |
 |
Date :
2015-06-14 16:53:14 |
By :
deksoke |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ขอบคุณครับได้ความรู้เยอะเลย แล้วก็เครื่องหมายคำถามก็ตามมาอีกเยอะเลย 
ขอเก็บไว้ศึกษาก่อน เดี๋ยวก่อปัญหามาให้แก้ใหม่ครับ
ขอบคุณทุกคนครับ 
|
 |
 |
 |
 |
Date :
2015-06-14 21:40:00 |
By :
little1983 |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
|
|