กระทู้เก่าบอร์ด อ.Yeadram
4,269 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
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 **************************
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
ขอบคุณมากนะคะ จะลองเอาไปทำดูค่ะ
Time: 0.3796s
ลักษณะนับรวม ไม่แยกอักขระ คือใช้ฟังก์ชั่น 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)
คงไม่งงกับคำถามนะครับ