กระทู้เก่าบอร์ด อ.Yeadram
5,939 4
URL.หัวข้อ /
URL
การตัดคำ Text หรือ String
โดยปกติใช้คำสั่ง Left, Trim, Mid มาช่วยแต่พอรายละเอียดมาก ๆ แล้วไม่ทราบว่าจะตัดอย่างไร, รบกวนอาจารย์ทั้งหลายช่วยชี้แนะ,ตัวอย่างโค้ดด้วยครับ เช่น
ใน1ฟิลด์ประกอบด้วยคำว่า "นายแสนศักดิ์ รักการเรียน แผนกประกอบ 10"
จะใช้คำสั่งอะไรช่วยทำให้แบ่งออกเป็น 2 ฟิลด์ดังนี้ให้เป็น
ฟิลด์ที่ 2 "นายแสนศักดิ์ รักการเรียน"
ฟิลด์ที่ 3 "แผนกประกอบ 10"
เนื่องจากมีช่องว่า space หลายช่อง (เป็นข้อมูลที่ถูกดึงมาให้) เพราะว่าผมทำแล้วจะได้เพียง "นายแสนศักดิ์" ครับ หรือไม่ก็ "รักการเีรียน", หากแบ่งออกไปอีกก็เป็น "แผนกประกอบ" หรือ "10" น่ะครับ
ขอบพระคุณครับ
ใน1ฟิลด์ประกอบด้วยคำว่า "นายแสนศักดิ์ รักการเรียน แผนกประกอบ 10"
จะใช้คำสั่งอะไรช่วยทำให้แบ่งออกเป็น 2 ฟิลด์ดังนี้ให้เป็น
ฟิลด์ที่ 2 "นายแสนศักดิ์ รักการเรียน"
ฟิลด์ที่ 3 "แผนกประกอบ 10"
เนื่องจากมีช่องว่า space หลายช่อง (เป็นข้อมูลที่ถูกดึงมาให้) เพราะว่าผมทำแล้วจะได้เพียง "นายแสนศักดิ์" ครับ หรือไม่ก็ "รักการเีรียน", หากแบ่งออกไปอีกก็เป็น "แผนกประกอบ" หรือ "10" น่ะครับ
ขอบพระคุณครับ
4 Reply in this Topic. Dispaly 1 pages and you are on page number 1
2 @R10999
'สร้าง sub procedure ตัดข้อความ
Sub CutWord(iWord As String)
'กำหนดตัวแปร array มารับข้อความที่ต้องการตัด
Dim astrKeyWords() As String
'กำหนดตัวแปรสำหรับวนลูป
Dim intLoop As Integer
'ตรวจสอบว่า ตัวแปรที่ส่งเข้ามาเป็นค่าว่างหรือไม่
If Not IsNull(iWord) Then
'ตัวแปร array มารับ ค่าจากฟังก์ชั่น Split ซึ่งจะตัดข้อความที่ส่่ง
'เข้ามา ด้วย " " (อาจเปลี่ยนเป็นสัญญลักษณ์อย่างอื่นก็ได้ เช่น
'colon(;) , Semicolon(;) Comma(,) เป็นต้น)
astrKeyWords = Split(iWord, " ")
'แล้ว วนลูปเพื่ออ่านค่า ที่ตัดได้ จาก Array แรก เริ่มที่ 0
'จนได้ค่าสุดท้าย UBound(astrKeyWords)
For intLoop = 0 To UBound(astrKeyWords)
MsgBox astrKeyWords(intLoop)
Next intLoop
End If
End Sub
ที่ ฟอร์ม ที่ต้องการส่งข้อความ
Private Sub Form_Load()
Call CutWord("นายแสนศักดิ์ รักการเรียน แผนกประกอบ 10")
End Sub
คงต้องประยุกต์ค่า ที่ได้จากการตัดคำ เช่น ค่าที่ส่งเข้าไปตัดคำ
แต่ละตำแหน่ง คือค่าของอะไร ถ้าต้องการชื่อ นามสกุลมาอยู่ด้วยกัน
จะต้องนำ array ตำแหน่งไหนมาต่อกัน
ปล. ไม่ได้มาตอบนานหลายเดือน เปลี่ยนจาก อย่าเห็นแก่ตัว เป็นไทยแอ็คเซส ตั้งแต่เมื่อไหร่ ไม่ทราบ
Sub CutWord(iWord As String)
'กำหนดตัวแปร array มารับข้อความที่ต้องการตัด
Dim astrKeyWords() As String
'กำหนดตัวแปรสำหรับวนลูป
Dim intLoop As Integer
'ตรวจสอบว่า ตัวแปรที่ส่งเข้ามาเป็นค่าว่างหรือไม่
If Not IsNull(iWord) Then
'ตัวแปร array มารับ ค่าจากฟังก์ชั่น Split ซึ่งจะตัดข้อความที่ส่่ง
'เข้ามา ด้วย " " (อาจเปลี่ยนเป็นสัญญลักษณ์อย่างอื่นก็ได้ เช่น
'colon(;) , Semicolon(;) Comma(,) เป็นต้น)
astrKeyWords = Split(iWord, " ")
'แล้ว วนลูปเพื่ออ่านค่า ที่ตัดได้ จาก Array แรก เริ่มที่ 0
'จนได้ค่าสุดท้าย UBound(astrKeyWords)
For intLoop = 0 To UBound(astrKeyWords)
MsgBox astrKeyWords(intLoop)
Next intLoop
End If
End Sub
ที่ ฟอร์ม ที่ต้องการส่งข้อความ
Private Sub Form_Load()
Call CutWord("นายแสนศักดิ์ รักการเรียน แผนกประกอบ 10")
End Sub
คงต้องประยุกต์ค่า ที่ได้จากการตัดคำ เช่น ค่าที่ส่งเข้าไปตัดคำ
แต่ละตำแหน่ง คือค่าของอะไร ถ้าต้องการชื่อ นามสกุลมาอยู่ด้วยกัน
จะต้องนำ array ตำแหน่งไหนมาต่อกัน
ปล. ไม่ได้มาตอบนานหลายเดือน เปลี่ยนจาก อย่าเห็นแก่ตัว เป็นไทยแอ็คเซส ตั้งแต่เมื่อไหร่ ไม่ทราบ
3 @R11003
ขอคิดด้วยคนนะครับ
คือถ้าข้อมูลมีแค่นี้จริงๆ ไม่มีอย่างอื่นแล้ว ตอบแบบกำปั้นทุบดิน แนวคิดง่ายๆแบบนี้เลยก็ได้ครับ
- Details_name คือชื่อฟิลด์บนฟอร์ม ข้อมูลที่มีอยู่
- Text1 คือชื่อฟิลด์บนฟอร์ม แสดงชื่อ นามสกุล
- Text2 คือชื่อฟิลด์บนฟอร์ม แสดงชื่อ แผนก และอื่นๆ
Private Sub Form_Current()
If Not IsNull(Me.Details) Then
Dim T1_name As Integer
Dim T2_name As Integer
T1_name = InStr(1, Me.Details_name, " ") ' หาค่าเว้นวรรคแรกก่อน
T2_name = InStr(T1_name + 1, Me.Details_name, " ") ' หาค่าเว้นวรรคที่สอง
Me.Text1 = Left(Me.Details_name, T2_name - 1)
Me.Text3 = Right(Me.Details_name, Len(Me.Details_name) - T2_name)
Else
Me.Text1 = ""
Me.Text3 = ""
End If
End Sub
แนวคิดประมาณนี้ครับ อาจเขียนให้กระชับกว่านี้ได้ เป็นแนวคิดแบบง่ายๆนะครับ ลองไปปรับใช้ดูครับ
คือถ้าข้อมูลมีแค่นี้จริงๆ ไม่มีอย่างอื่นแล้ว ตอบแบบกำปั้นทุบดิน แนวคิดง่ายๆแบบนี้เลยก็ได้ครับ
- Details_name คือชื่อฟิลด์บนฟอร์ม ข้อมูลที่มีอยู่
- Text1 คือชื่อฟิลด์บนฟอร์ม แสดงชื่อ นามสกุล
- Text2 คือชื่อฟิลด์บนฟอร์ม แสดงชื่อ แผนก และอื่นๆ
Private Sub Form_Current()
If Not IsNull(Me.Details) Then
Dim T1_name As Integer
Dim T2_name As Integer
T1_name = InStr(1, Me.Details_name, " ") ' หาค่าเว้นวรรคแรกก่อน
T2_name = InStr(T1_name + 1, Me.Details_name, " ") ' หาค่าเว้นวรรคที่สอง
Me.Text1 = Left(Me.Details_name, T2_name - 1)
Me.Text3 = Right(Me.Details_name, Len(Me.Details_name) - T2_name)
Else
Me.Text1 = ""
Me.Text3 = ""
End If
End Sub
แนวคิดประมาณนี้ครับ อาจเขียนให้กระชับกว่านี้ได้ เป็นแนวคิดแบบง่ายๆนะครับ ลองไปปรับใช้ดูครับ
4 @R11004
แก้ไขครับ
Me.Text3 ในโค๊ต เปลี่ยนเป็น Me.Text2 นะครับ
ผมเบลอครับ
Me.Text3 ในโค๊ต เปลี่ยนเป็น Me.Text2 นะครับ
ผมเบลอครับ
Time: 0.3883s
เช่นคุณได้คำว่า
| นายแสนศักดิ์ | รักการเรียน | แผนกประกอบ | 10 |
ก็นำมา & กัน