สร้าง function นับแต่ละตัวอักษรบนข้อความได้ไหมคะ
กระทู้เก่าบอร์ด อ.Yeadram

 4,098   4
URL.หัวข้อ / URL
สร้าง function นับแต่ละตัวอักษรบนข้อความได้ไหมคะ

สามารถสร้าง function บน Access 2003 โดยนับแต่ละตัวอักษรบนข้อความได้ไหมคะ เช่น aaabbbbccccc สามารถบอกได้ไหมคะว่ามีตัวอักษร a, b, c อย่างละกี่ตัวอักษร จะต้องไปสร้างในคิวรี่ใช่ไหมคะ

4 Reply in this Topic. Dispaly 1 pages and you are on page number 1

1 @R01269
ผมไม่เคยใช้ 2003 นะครับ แต่คิดว่าน่าจะหลักการคล้ายๆ กัน
ลักษณะนับรวม ไม่แยกอักขระ คือใช้ฟังก์ชั่น len()
แต่ถ้าต้องให้นับแบบมีเงื่อนไข น่าจะต้องเขียนฟังก์ชั่นขึ้นมาใช้เอง
เมื่อได้ฟังก์ชั่นซึ่งเขียนไว้ในโมดูลแล้ว สามารถนำฟังก์ชั่นไปใช้ใน ฟอร์ม, คิวรี่, รายงานใดๆ ก็ได้ ภายใน mdb ตัวเดียวกัน

แต่ถามเพิ่มหน่อยครับ ถ้าผมจะลองเขียนฟังก์ชั่นให้ ผมต้องขอทราบเพิ่มเติม
- ในประโยคที่ต้องการนับ มีอักขระที่แตกต่างกันกี่ตัว ระบุได้มั้ย หรือว่าไม่แน่นอน
- คำตอบที่ได้ มันจะต้องตอบออกมาหลายคำตอบ อาจจะคืนค่าออกมาเป็น อาเรย์เลย ต้องการแบบนั้นใช่มั้ย

ตัวอย่างการทำงานกรณีไม่รู้ว่าในแต่ละประโยคมีอักขระตัวใดบ้าง แต่ทราบว่ามี 3ตัวแน่ๆ
sq ="aaabbbbccccc"
x=myLen(sq,1)     'คำตอบคือ 3 (นับอักขระตัวแรก)
y=myLen(sq,2)     'คำตอบคือ 4 (นับอักขระลำดับถัดไป)
z=myLen(sq,3)     'คำตอบคือ 5 (นับอักขระลำดับถัดไป)

ตัวอย่างการทำงานกรณีรู้แน่นอนว่ามีตัวอะไรบ้าง
sq ="aaabbbbccccc"
x=myLen(sq,"a")     'คำตอบคือ 3 (นับตัว a)
y=myLen(sq,"b")     'คำตอบคือ 4 (นับตัว b)
z=myLen(sq,"c")     'คำตอบคือ 5 (นับตัว c)

คงไม่งงกับคำถามนะครับ
2 @R01274
ในประโยคมีตัวอักษรที่แน่นอนหลักคือ A, T, C, G แต่อาจจะมีตัวอักษรอื่นแทรกมาด้วยเป็นบางครั้งคือ R, Y, M, K, S, W, H, B, V, D, N เช่น ATCGGATTCCAGGAATC ซึ่งอาจจะมีตัวอื่น (R,....,N) ปนมาด้วยเป็นบางข้อความ สามารถนับได้ไหมคะ ว่ามี A, T, C, G และตัวอื่น อย่างละกี่ตัวค่ะ และต้องไปสร้างฟังก์ชั่นในโมดูลตรงไหน ยังไงคะ ขอบคุณล่วงหน้าค่ะ
3 @R01280
ตัวอย่างการนำฟังก์ชั่นไปใช้ในคิวรี่
1 เขียนฟังก์ชั่นชื่อ myLen()
2 สร้างคิวรี่ ในฟิลด์ที่ต้องการก็ให้เรียกใช้ฟังก์ชั่นของเรา
2.1 ผลของการนับ เขียนคำตอบต่อกัน ทุกอักขระ
select *, mylen("ฟิลด์ที่ต้องการนับ") as Expr1 from table1

2.2 ต้องการนับแค่ อักขระเดียว
select *, mylen("ฟิลด์ที่ต้องการนับ", "อักขระที่ต้องการนับ") as Expr1 from table1

2.3 ต้องการนับแค่ อักขระเดียว คืนค่าออกมาเป็นตัวเลข
select *, mylen2("ฟิลด์ที่ต้องการนับ", "อักขระที่ต้องการนับ") as Expr1 from table1



**************** Module **************************

Option Compare Database
Option Explicit

Public Function myLen(ByVal yourText As String, Optional yourChr = "") As String
Dim i, j, x, y As Integer
Dim s, t As String

' งาน 1 ถ้ามีการระบุตัวอักขระ มา
yourChr = Left(LTrim(yourChr), 1)
If IsNumeric(yourChr) Then yourChr = ""
If yourChr <> "" Then
myLen = yourChr & "=" & myLen2(yourText, yourChr)
Exit Function
End If


' งาน 2 ถ้าไม่มีการระบุตัวอักขระ
' งาน 2.1 ตัดตัวซ้ำ

s = Left(yourText, 1)
t = s
For j = 2 To Len(yourText)
s = Mid(yourText, j, 1)
For i = 1 To Len(t)
y = 0
If CStr(Mid(t, i, 1)) = CStr(s) Then
y = 1
Exit For
End If
Next
If y = 0 Then t = t & s
Next


' งาน 2.2 เขียนคำตอบ
s = ""
For i = 1 To Len(t)
s = s & Mid(t, i, 1) & "=" & myLen2(yourText, Mid(t, i, 1)) & ","
Next

myLen = Left(s, Len(s) - 1)

End Function


Public Function myLen2(ByVal yourText As String, ByVal yourChr As String) As Integer
Dim j As Integer
Dim x As Integer
x = 0
For j = 1 To Len(yourText)
If Mid(yourText, j, 1) = yourChr Then x = x + 1
Next
myLen2 = x
End Function
4 @R01282
ขอบคุณมากนะคะ จะลองเอาไปทำดูค่ะ
@ ประกาศใช้งานเว็บบอร์ดใหม่ => บอร์ดเรียนรู้ Access สำหรับคนไทย
แล้วจะใส่ลิ้งอ้างอิงมาที่โพสต์เก่านี้หรือไม่ก็ตามสะดวกครับ
Time: 0.2978s