แยกชื่อ
กระทู้เก่าบอร์ด อ.Yeadram

 1,754   5
URL.หัวข้อ / URL
แยกชื่อ

ต้องการแยกข้อมูลดังนี้

ข้อมูลเดิม : นายคมสัน ใจดี
(ฟิลด์เดียวกัน)

ต้องการให้แยกออกมา 3 ฟิลด์ คือ คำนำหน้าชื่อ ชื่อ นามสกุล

นาย | คมสัน | ใจดี

มีโค้ดแยกมั้ยค่ะ

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

1 @R02344
โค้ดมันไม่ฉลาดขนาดเก็บคำศัพท์ได้ทุกตัว ยิ่งเป็นภาษาไทยแล้วยิ่งยาก
ส่วนใหญ่ที่เราจะสั่งแยกคำเหล่านี้ได้เรามักให้โค้ด มันไปสังเกต "ตัวคั่น" แล้วแบ่งตามตัวคั่น

กรณีตัวอย่างที่คุณให้มา ก็เห็นว่า ระหว่างชื่อกับ นามสกุล มีตัวคั่นอยู่ คือ "เคาะ" หรือ Space ในการนี้โค้ดก็ช่วยแยกได้ครับ

แต่ระหว่างคำนำหน้ากับชื่อนี่สิ ปัญหา เพราะไม่มีตัวคั่น และคำนำหน้าไม่รู้ว่ามีกี่ชนิดในกลุ่มข้อมูลของคุณ ถ้าเราจะใช้เงื่อนไขแบบ If..then...else เข้าช่วย (หรือ select case) ก็ไม่รู้ว่าต้องกี่ชั้น กี่ทอด

ผมว่าจะเขียนตัวอย่างโค้ดให้ดูหน่อย ก็ไม่รู้ว่าจะเอาโค้ดไปใช้ในที่ไหน
มันก็มีเช่น
iif(___, ___, ____)
split()
instr()
left()
len()
อะไรพวกนี้แหละครับ ต้องเอามาผสมกัน
2 @R02347
เคยเจอกรณีแบบนี้ และเนื่องจากไม่มีอัลกอรึธึมที่ใช้แยกคำภาษาไทยได้อย่างถูกต้อง 100% หรือถ้าจะเขียนก็คงยากทีเดียว ดังนั้นคุณอาจเจอคนชื่อ สาว ที่แต่งงานแล้ว ดังนั้นจึงเขียนเป็น นางสาว หรือถ้ายังไม่แต่งงาน ก็จะเป็น นางสาวสาว หรือกรณี สาวิตรี แต่งงานแล้ว ก็จะเป็น นางสาวิตรี หลังจากตัด คุณอาจตัดไปโดนเป็น นางสาว   ิตรี

นอกนี้ยังอาจมีคำนำหน้า น.ส. นส. นส นาง นางสาว พล.ต. หม่อมหลวง มล.ดร. ฯลฯ อีกร้อยแปดแบบ   หรือแม้แต่คีย์ผิด นาสาว นา หรือ นง ก็เป็นไปได้

ดังนั้นเมื่อตัดเสร็จแล้ว ก็ต้องตรวจด้วยสายตาเอาเองอีกครั้งครับ ... ถ้าข้อมูลเยอะ (ซึ่งคงเป็นเช่นนั้น) ก็เป็นงานน่าเบื่อที่ยังต้องใช้คนตรวจอยู่ดี ... บอกได้เพียงว่า ทำใจและค่อยๆทำไปครับ

แนะนำได้เพียงว่า คุณตัดคำนำหน้า ทำทีละแบบ เช่น ตัดคำว่า "นาย" คุณก็ทำไปให้หมดทุกเรคอร์ดก่อน แล้วตรวจสอบผล แล้วก็ค่อยเอาเรคอร์ดที่เหลือไปทำการตัดคำนำหน้าคำอื่นๆต่อไป ... อย่าเขียนโปรแกรมเดียวแล้วตัดได้ทุกแบบ จะเสียเวลามากๆ เพราะคุณจะแก้แล้วทำใหม่ แก้แล้วทำใหม่ วนอยู่นั่นครับ
3 @R02352
่่่ขออนุญาติคุณ ลี่ ขอแจมหน่อย

ขอถามว่าถ้าจะแยกตัว คือ "เคาะ" หรือ Space นี้ใช้ ฟังก์ชั่น ตัวไหนครับ คำสั้ง

split() ไม่มีใน access 97 ครับ
4 @R02353
ก็ใช้ InStr( ) เพื่อหาตำแหน่งของ Space ก่อน แล้วใช้ Left( ) , Mid( ) และ Right( ) เพื่อตัดเอาสตริงค์ออกมาครับ
5 @R02369
ผมว่าลองเช็คดูก่อนว่าคำนำหน้ามีอะไรบ้าง
แล้วตัดคำนำหน้าก่อน
หลังจากนั้นแยกชื่อกับนามสกุลไม่ยากแล้วเพราะมี space ขั้นอยู่ครับ
@ ประกาศใช้งานเว็บบอร์ดใหม่ => บอร์ดเรียนรู้ Access สำหรับคนไทย
แล้วจะใส่ลิ้งอ้างอิงมาที่โพสต์เก่านี้หรือไม่ก็ตามสะดวกครับ
Time: 0.1886s