รบกวนวิธีแปลงค่า จากตำแหน่งตัวเลขครับ
กระทู้เก่าบอร์ด อ.Yeadram

 5,380   34
URL.หัวข้อ / URL
รบกวนวิธีแปลงค่า จากตำแหน่งตัวเลขครับ

ขอสอบถามวิธีอ่านค่าใน field ครับ
ตัวอย่างมีตำแหน่งอยู่ 5 หลัก เช่น
    "xxxxx" อ่านว่า เช้า เที่ยง เย็น ก่อนนอน บ่าย
    
    "x x x" อ่านว่า เช้า เย็น บ่าย
   
    "   xx"   อ่านว่า ก่อนนอน บ่าย

    "x    "    อ่านว่า เช้า

โดยที่ x เป็นอักษรหรือตัวเลขใดๆก็ได้ครับ

       ขอบคุณครับ              

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

1 @R11448
Function TransData(iData As String) As String
Dim Var(4) As String
Dim x As String
Dim i As Integer
x = iData
For i = 1 To Len(x)
    If Mid(x, i, 1) <> " " Then
        Select Case i
              Case 1
                    Var(0) = "เช้า" & " "
              Case 2
                    Var(1) = "เที่ยง" & " "
              Case 3
                    Var(2) = "เย็น" & " "
              Case 4
                    Var(3) = "ก่อนนอน" & " "
              Case 5
                    Var(4) = "บ่าย"
        End Select
    Else
        Var(i - 1) = ""
      End If
Next
TransData = Var(0) & Var(1) & Var(2) & Var(3) & Var(4)
End Function

ส่งค่าเข้า ฟังก์ชั่น เช่น
ที่ Form_Load
Text0.value=TransData("12 45")
2 @R11465
               ขอบพระคุณอจ. ditasilk มากๆครับ
จะพยายามทดลองทำดู เพราะผมเขียน Function เองไม่ค่อยเก่ง(ศึกษาเองจากตำรา)   
หากผมจะนับค่าตรงนี้แทน เช่น

     "x x x"    แปลว่า 3 ครั้ง
    "   xx"    แปลว่า 2 ครั้ง
       x เป็นค่า string อยู่แล้ว จะนับโดยไม่ต้องเขียนใน code จะได้หรือไม่ครับ
3 @R11466
สิ่งที่คุณให้มา
ตัวอย่างมีตำแหน่งอยู่ 5 หลัก เช่น
    "xxxxx" อ่านว่า เช้า เที่ยง เย็น ก่อนนอน บ่าย
     
    "x x x" อ่านว่า เช้า เย็น บ่าย
    
    "   xx"   อ่านว่า ก่อนนอน บ่าย

    "x    "    อ่านว่า เช้า
ขอถามกลับ
"x x x" = 3 ครั้ง
"xxx " , "x xx ", "x xx" = 3 ครั้ง แปลความหมายเหมือนกันหรือต่างกันครับ
ถ้าผมเข้าใจไม่ผิด
"x    " = เช้า
" x   " = เที่ยง
" x " = เย็น
"   x " = ก่อนนอน
"    x" = บ่าย
นั่นคือเป็นการระบุความหมายตามตำแหน่ง จะไปนับจำนวนครั้งไม่ได้ครับ
ขอทำความเข้าใจตามนี้ก่อน ถ้าผมเข้าใจผิด ช่วยอธิบายเพิ่มเติมครับ
4 @R11467
        ที่ อจ.ditasilk เข้าใจถูกต้องครับ
   
ผมทำงานอยู่ รพ.ต้องติดตามการใช้ยา ว่ามี่การสั่งให้ผป.นานมากเกินไปหรือไม่ จึงต้องทราบวิธีการใช้ยาแต่ละตัว

หน่วยคอมส่งข้อมูลให้มาวิเคราะห์เอาเอง เขาเขียนรหัสวฺีธีกินตามที่ อจ.เข้าใจครับ   

ขณะนี้ผมใช้วิธีโง่ๆคือ group by วิธีกินแล้วตรวจด้วยด้วยสายตา พิมพ์ค่าวิธีกินsave เป็น query ไว้ เช่น

"xxx " , "x xx ", "x xx" แปลว่าวันละ 3 ครั้งเหมือนกัน แต่เวลาที่กิน
     "x x x" อ่านว่า เช้า เย็น บ่าย
     "xxx " อ่านว่า เช้า เที่ยง เย็น
     "x xx" อ่านว่า เช้า ก่อนนอน บ่าย

   หลังจากนั้นนำ table นี้มาเชื่อมกับ ข้อมูลที่ได้รับมา นำจำนวนที่กินต่อวันไปหารจำนวนยา จะได้จำนวนวันที่นัดผป.ซึ่งไม่ค่อยสะดวก

    หากนับตรงนี้ไม่ได้ ที่ อจ ditasilk เขียน code วิธีกินไว้ จะนับได้อย่างไรครับ
                               ขอบพระคุณครับ
5 @R11468
พอมีข้อมูล ส่งเข้า email ของ board มั้ยครับ เอาเฉพาะเท่าที่จะให้ดูเป็นตัวอย่างได้
email : accboard@gmail.com
ผมจะดูให้ครับ
ปกติ ผมจะพบรหัสที่ใช้ แยกออกจากกันทั้ง จำนวนครั้ง กับ เวลาที่รับประทาน เช่น
1x2pc หรือ bidpc วันละ 2 ครั้ง หลังอาหาร บอกจำนวนครั้ง และหลังอาหาร -->จำนวนครั้งต่อวัน
ส่วนเวลาใช้ยา ก็ตั้งรหัส ให้สอดล้องกับเวลาที่ทาน
เช่น 123 =เช้า กลางวัน เย็น
ตอบคำถาม get ประเด็น แล้วว่านับไปทำไม
"xxx x" =4 ครั้ง
"xxx " = 3 ครั้ง
สามารถนับได้ครับ ปกติจะนับจำนวนตัวอักษร จะใช้ Len("ข้อความ")
แต่เนื่องจาก ภายในมี string มีช่องว่าง เราต้องแทนที่ ช่องว่างเสียก่อน
Replace("ข้อความ"," ","") แทนที่ " " ด้วย ""
จากนั้นใช้คำสั่ง Len(Replace("ข้อความ"," ","")) จะได้จำนวนครั้งตามที่ต้องการ
ส่วนเวลาทาน ก็ส่งเข้าฟังก์ชั่นที่เขียนให้ จะได้เวลาที่ใช้ยา
6 @R11471
โอ ดีใจ ทำได้แล้วครับ

    ขอบพระคุณ อจ.ditasilk มากๆเลยครับ ที่อุตส่าห์เสียสละเวลา
มาให้ความรู้กับคนใน board ครับ

    สักวันหนึ่งผมหากวิทยายุทธ ความรู้แกร่งกล้าพอ จะสละเวลาให้ความรู้กับคนอื่นครับ
     ขอบพระคุณ อีกครั้งครับในความกรุณา
   
7 @R11553
จากไฟล์ที่ส่งมา
จำนวนเม็ดที่กินต่อมื้อ =DFNUM
ต้องการหาจำนวนทีกินต่อวัน
มาจาก DFMEAL หาจำนวนครั้ง ได้แล้วใช่มั้ยครับ (R11468)
เอาไปคูณกับ DFNUM จะได้ จำนวนต่อวัน
พอจะทำได้มั้ยครับ
แล้วข้อมูลส่งมาจาก computer เป็น excel หรือ ACCESS ครับ
แล้ว ต้องการผลเป็นรูปแบบไหน excel/access????
8 @R11554
เป็น access ครับ อจ. ditasilk แต่มันยากกว่าที่คิดครับเช่น

DFMEAL = "xxxxx" ถ้า char(0) = char(1)=char(2)=char(3)=char(4)เท่ากัน
             หากมีค่า"00000" หมายถึง =5 ครั้ง , "1 111" =4 ครั้ง
หาจำนวนเม็ดที่กิน/วันได้ โดยเอา DFNUM x DFMEAL ได้เลย เช่น
เช่น DFNUM = 4 ,DFMEAL"00000" = 20 เม็ดต่อวัน
       DFNUM = 1 ,DFMEAL"1 111" = 4 เม็ดต่อวัน

   
แต่ถ้าเป็น "2 2 2" หมายถึง 3 ครั้ง(DFNUMในโปรแกรมจะเป็น 2หรือ0 เท่านั้น)
        DFNUM x DFMEAL = 3 ชึ่งผิดครับ
ยาตัวนี้เขากิน 2 เม็ด เช้า เที่ยง เย็น = 6 เม็ดต่อวันครับ

ในกรณีแต่ละมื้อที่กินไม่เท่ากันค่าใน DFMEAL จะไม่เท่ากัน เช่น ,
"1 211" หมายถึง ช-1 ย-2 กน-1 บ-1   = 5 เม็ดต่อวันครับ
"4 2 " หมายถึง ช-4 ย-2                  = 6 เม็ดต่อวันครับ           
"2231 "หมายถึง ช-2 ย-2 ท-3 กน-1   = 8 เม็ดต่อวันครับ       

   ซึ่งตรงจุดนี้ผมไม่รู้จะทำอย่างไรครับ ต้องดูแต่ละตัว หากมี rec มากๆจะปวดตามาก เพราะใน 1 เดือนจะมีประมาณ 5 แสน rec

   ในกรณีที่เป็นเลขที่มีทศนิยม เช่น 0.5,0.25 เขาจะแทนด้วย B,A ครับ

รบกวนด้วยครับ
9 @R11555
สิ่งที่คิดออก แต่เขียนไม่เป็นคือ

หากDFMEAL = "xxxxx" ถ้า char(0)= char(1)=char(2)=char(3)=char(4)
มีค่า = 0 หรือ 1แต่ไม่เท่ากับตัวอักษร
     มื้อที่กินต่อวัน =LEN(REPLACE[DFMEAL] x DFNUM แน่นอนครับ
       
   หาก DFMEAL มีค่าตัวใดตัวหนึ่ง =>2 มื้อที่กินต่อวัน =x+x+x+x+x ครับ

ผมพยายามคิดเองเป็นอาทิตย์ๆ แล้วก็ทำไม่ได้ยังไม่ได้ครับ

ข้อมูลทั้งหมดเป็น access ครับผม
10 @R11556
แก้คำผิด

มื้อที่กินต่อวัน =LEN(REPLACE[DFMEAL]," ","") x DFNUM แน่นอนครับ
11 @R11557


จำนวนเม็ดที่กินต่อวัน =LEN(REPLACE[DFMEAL]," ","") x DFNUM
12 @R11558
ส่งข้อมูลที่เป็น access เข้า webboard ได้มั้ยครับ
การเขียนโปรแกรม มันต้องมีกฏ กติกา ที่ชัดเจน
ลองคิดดูนะครับว่า รหัส 1 ตัว มีความหมาย ได้หลายอย่าง แล้วการเขียนโปรแกรมจะเอาหลักการ อะไรมาเขียนให้เป็นไปตามที่ต้องการ
ให้ดูเบื้องต้น ก่อนเลย ว่า
1 รหัส 1 ความหมาย หรือ หลายความหมาย
ถ้าหลายความหมาย มีหลักการในการแปลความหมายที่ชัดเจนหรือไม่
ถ้า ชัดเจน เขียนออกมาครับ
ถ้าไม่สามารถเขียนออกมาได้ หมายความว่า เรายังไม่สามารถแปลค่าได้
(ยังไม่ต้องคิดถึงเรื่องการเขียนโปรแกรมนะครับ) แล้วคนอื่น จะเข้าใจรึเปล่า????????
ยังไงถ้าส่งเข้า board แล้ว แจ้งด้วยนะครับ ผมจะเข้า ดู email เมื่อ แจ้งเท่านั้น
13 @R11559
เรียน อจ.ditasilk
ผมส่งข้อมูลมาใหม่แล้วครับ
14 @R11560
เรียน อจ.ditasilk
จำนวนเม็ดต่อวัน= DFNUM x DFMEAL   จะเป็นจริงก็ต่อเมื่อ

DFMEAL= "xxxxx" char(0) = char(1)=char(2)=char(3)=char(4) เท่ากัน    
หรือ           "x x x" char(0) =char(2)=char(4)

หากไม่เท่ากัน จำนวนเม็ดต่อวัน x+x+x+x+x


code พวกนี้เขาไม่ยอมแปลงให้ เขาหวงมาก หากจะให้ทำจะต้องเรื่องเบิกจ่ายเงินให้ให้วิเคราะห์เป็นคราวๆ
15 @R11561
ในกรณีที่ DFMEAL รหัสไม่เหมือนกัน
จำนวนเม็ดตามรหัส ต่อไปนี้มีค่าเท่าไหร่
A= 0.25 เม็ด
B = 0.5 เม็ด
C= 0.75 เม็ด
F= 1.5 เม็ด
J= 2.5 เม็ด
3= 3 เม็ด
เป็นต้น
ถ้าเป็นตามนี้ ผมคิดว่าคงไม่ยากแล้วใช่มั้ยครับ
ทีนี้ข้อยกเว้น หรือที่ไม่เป็นตามนี้ต้องยกถามเป็น กรณี หรือหาข้อสรุปอื่น ๆ
เป็นกรณี
16 @R11562
ผมเรียน อจ ตามพยายามเขีย function หรือเขียน query ทีละ step ไม่ได้ ผมติดตรงนี้ละครับ เช่น

ผมรู้ว่าหาก DFMEAL= "xxxxx" char(0) = char(1)=char(2)=char(3)=char(4)

จำนวนเม็ดที่กินต่อวัน= LEN(REPLACE[DFMEAL]," ","") x DFNUM

แต่หาก DFMEAL= รหัสไม่เหมือนกัน ซึ่งมีอาจมีเป็น 2 หรือ 3 หรือ 4 หลัก
   
ต้องเอาDFMEAL มาบวกกัน ผมทำลองเป็นอาทิย์ๆแล้วทำไม่ได้เลย

                          กรณีอื่นจะไม่เป็นปัญหาสำหรับผมเลย

รบกวน อจ.ช่วยอีกสักครั้งเถอะครับ
             
               น่าอายมากๆจริงๆใช่ไหมครับ
17 @R11563
ตามนี้ครับ สงสัยตรงไหนถามมาละกันครับ

Function CalTabletPerDay(strDFMeal, sngDFNUM As Single) As Single
Dim sngResult As Single
Dim strMealDigit As String
Dim sngTempNum As Single
Dim lngLoop As Long
Dim lngLen As Long

    sngResult = 0
    
'Loop check digit
    lngLen = Nz(Len(strDFMeal))
    For lngLoop = 1 To lngLen
        strMealDigit = Mid(strDFMeal, lngLoop, 1)
'if digit = "0" then use DFNUM
        If strMealDigit = "0" Then
            sngTempNum = sngDFNUM
        Else
            sngTempNum = ConvertValue(strMealDigit)
        End If
        sngResult = sngResult + sngTempNum
    Next lngLoop
    
    CalTabletPerDay = sngResult
End Function

Function ConvertValue(strMealDigit As String) As Single
Dim sngResult As Single
    Select Case strMealDigit
        Case ""
            sngResult = 0
        Case "A"
            sngResult = 0.25
        Case "B"
            sngResult = 0.5
        Case "F"
            sngResult = 1.5
        Case Else
            sngResult = Val(strMealDigit)
    End Select
    
    ConvertValue = sngResult
End Function

ปล. ไม่ต้องอายนะครับ ไม่ทราบว่าคุณทำหน้าที่ ตำแหน่งงานอะไร คนที่ต้องอายคือ เจ้าหน้าที่ IT ต่างหากครับ
18 @R11564
ขอบพระคุณครับ อจ.PichaiTC
     ผมเป็นเภสัชกร หัวหน้าห้องจ่ายยา ต้องติดตาม monitor ข้อมูลที่น่าสงสัย เพื่อแจ้งผู้บริหาร
     
      อจ.PichaiTC เชื่อไหมครับว่าผมเปิด board นี้อ่านทุกวันเลยครับ

   พยายามหัดเรียนรู้ครับ หักฝึกฝนจาก board สม่ำเสมอ
ทั้งๆที่รู้ว่า จะต้องสร้าง criteria แบบนี้จึงจะอ่านรหัสเขาได้ แต่พยายามหลายๆอาทิตย์ ก็ทำไม่ได้

                                    ขอบพระคุณมากครับ
19 @R11565
อจ.PichaiTC

    ผมทดลอง function นี้แล้ว B: CalTabletPerDay([dfmeal])

   มันจะขึ้นว่า "จำนวนอาร์กิวเมนต์ที่ใช้กับฟังก์ชั่น ในนิพจน์แบบสอบถาม          

        CalTabletPerDay([dfmeal])"

               ทำไม่ได้ครับ
20 @R11566
ต้องส่ง parameter 2 ตัวครับ

จำนวนเม็ดต่อวัน: CalTabletPerDay(DFMeal, DFNUM)
@ ประกาศใช้งานเว็บบอร์ดใหม่ => บอร์ดเรียนรู้ Access สำหรับคนไทย
แล้วจะใส่ลิ้งอ้างอิงมาที่โพสต์เก่านี้หรือไม่ก็ตามสะดวกครับ
Time: 0.3210s