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

 3,085   7
URL.หัวข้อ / URL
เราสามารถแยกตัวอักษรออกจากตัวเลขได้ไหมคะ

หนูสร้างฟอร์มซึ่งมีฟิลด์รหัสสินค้าสมมติว่าชื่อ Text-1 กำหนดรูปแบบไว้ตายตัวคือ ตัวอักษรหนึ่งตัวและตัวเลขอีกสี่ตัว ลักษณะดังนี้ค่ะ
A0001
ความต้องการของหนูก็คือ จะสร้างฟิลด์ที่ไม่ได้ผูกกับตารางใดเลยสัก 2 ฟิลด์อยู่บนฟอร์อมเดียวกัน สมมติว่าชื่อText-2 และ Text-3 ค่ะ

หนูอยากให้เมื่อผู้ใช้คียรหัสสินค้าในช่อง Text-1 ว่า A1234 ก็ให้แยกส่งค่าเฉพาะตัวอักษร A มาที่ช่อง Text-2
และส่งค่าเฉพาะตัวเลข 1234 มาที่ช่อง Text-3

หรือเมื่อผู้ใช้คียรหัสสินค้าในช่อง Text-1 ว่า B7890 ก็ให้แยกส่งค่าเฉพาะตัวอักษร B มาที่ช่อง Text-2
และส่งค่าเฉพาะตัวเลข 7890 มาที่ช่อง Text-3

ประมาณนี้แหละค่ะ ไม่ทราบว่าเราสามารถแยกได้ไหมคะ
หากสามารถทำได้ ก็ขอความกรุณา ช่วยเขียนโค้ดให้หนู่หน่อยนะคะ
ขอขอบคุณค่ะ

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

1 @R03319
ถ้าสิ่งที่ผู้ใช้กรอกมา มีจำนวนอักขระที่ตายตัว เช่นตัวอย่าง คือ ความยาว 5
อย่างนี้ใช้ฟังก์ชั่น left() right() หรือ mid() ได้เลยครับ

แต่ถ้า มีการเน้นว่า กลุ่มแรก (อาจจะไม่ใช่ 1 อักขระ) ต้องเป็นตัวอักษร
และเน้นว่า กลุ่มหลัง (อาจจะไม่ใช่ 4 อักขระดังตัวอย่าง) ต้องเป็นตัวเลข
แบบนี้ก็ใช้ฟังก์ชั่น isnumeric() เข้าช่วยตรวจสอบ เพิ่มเติมอีกทีครับ

จากคำถามนะครับ เห็นยกตัวอย่างข้อมูลมา สองตัวอย่าง สังเกตุเห็นว่า มีอักขระรวมแค่ 5 ตัว และโดยพฤติกรรมของผู้ใช้แล้วไม่น่าจะฝ่าฝืนมากมาย ดังนั้นก็ได้โค้ดง่ายว่า

Private sub Text-1_Exit()
text-2=left(text-1,1)
text-3=right(text-1,4) ' หรือ text-3 = mid(text-1,2)
End sub
2 @R03320
ขอบคุณค่ะอาจารย์
โค้ดที่ท่านให้มาใช้ได้เรียบร้อยตามที่หนูต้องการเลยค่ะ ตอนแรกก็ติด Error อยู่เหมือนกันหนูก็เลยลองเติม Cancel As Integerg เข้าไปในวงเล็บดู จึงผ่านฉลุยใช้ได้เรียบร้อยค่ะ

Private Sub Text1_Exit(Cancel As Integer)

text2 = Left(Text1, 1)
Text3 = Right(Text1, 4)

End Sub

ขอขอบคุณอาจารย์อีกครั้งค่ะ
3 @R07645
ขอตัวอย่างการนำใช้ isnumeric()ใด้มั่ยค่ะ

ขอบคุณค่ะอาจารย์
4 @R07646
ตัวอย่างครับ
Sub CheckNumeric
if IsNumeric("A") then
MsgBox "This is numeric value"
else
Msgbox "This is not numeric value"
End if
End Sub
5 @R07653
แล้วเราจะแยกค่าใด้ยังไงค่ะ เช่น

20TP
100TQ
25TD
50NQ
5HS
10HB
10AP
10AC

เราอยากจะแยก ออกมาเก็บเป็นค่าของแต่ละตัวแปรค่ะ ขอบคุณค่ะอาจารย์ ที่ช่วยตอบ
6 @R07663
ถ้าเป็นผมคง for เอาตาม ขนาดตัวครับ
คงประมาณ

a = "120TB"
b = 0
x= 1
for i =1 to len(a)
   if NOT isnumeric(Left(a, x)) then              
           d(1) = Left(a,x)
           d(2) = Right(a,len(a)-x)
           exit for
    end if
next i
ประมาณนี้ละครับ แชร์ๆกันครับ
7 @R07672
รบกวนอีกน่ะค่ะ คือแบบว่ามันมี error : 'Public Property Left() As Integer' has no parameters and its return type cannot be indexed.

code :

While SR.Peek <> -1
               Str = SR.ReadLine
               For c As Integer = 0 To Str.Count - 1
                    a = Str(c)
                    b = 0
                    x = 1
                    For y As Integer = 1 To Len(a)

                        If Not IsNumeric(Left(a, x)) Then
                            d(1) = Left(a, x)
                            d(2) = Right(a, Len(a) - x)
                            Exit For
                            'Return
                        End If
                    Next y
               Next
            End While

คือเราอ่านค่าจาก text file ที่ละแถวค่ะอาจารย์ แล้วจะมา Insert เข้า DB อีกที ช่วยดูตรงแยกข้อมูนให้ด้วยน่ะค่ะ

เนื้อในของไฟล ก็ประมานนี้ีคะ

20TP
100TQ
25TD
50NQ
5HS
10HB
10AP
10AC
ขอบคุณค่ะอาจารย์
@ ประกาศใช้งานเว็บบอร์ดใหม่ => บอร์ดเรียนรู้ Access สำหรับคนไทย
แล้วจะใส่ลิ้งอ้างอิงมาที่โพสต์เก่านี้หรือไม่ก็ตามสะดวกครับ
Time: 0.3793s