问题如下,一台电脑与一台检测仪器通讯
检测仪器的通讯格式如下:
R   73 011C ‘这行是开始的符号
R 01,1,,1,0,11ALT,谷丙转氨酶(ALT),,19.9,IU/L,(5.0 - 40.0),10/30/2002 132B
R 02,2,26,1,0,11ALT,谷丙转氨酶(ALT),,20.9,IU/L,(5.0 - 40.0),10/30/2002 138D
R 02,2,26,1,0,12AST,谷草转氨酶(AST),,26.4,IU/L,(5.0 - 40.0),10/30/2002 1380
R 02,2,26,1,0,13ALP,碱性磷酸酶(ALP),,40.6,IU/L,(15.0 - 121.0),10/30/2002 146A
R 02,2,26,1,0,14r-GT,r-谷氨酰转移酶(r-GT),,21.8,IU/L,(5.0 - 54.0),10/30/2002 166A
R 02,2,26,1,0,15TP,总蛋白(TP),,76.6,g/L,(60.0 - 85.0),10/30/2002 1037
R 02,2,26,1,0,16ALB,白蛋白(ALB),,46.6,g/L,(40.0 - 60.0),10/30/2002 1056
R 02,2,26,1,0,17TBIL,总胆红素(T-BIL),,10.6,umol/L,(2.0 - 20.0),10/30/2002 1439
R 02,2,26,1,0,18DBIL,直接胆红素(D-BIL),,5.1,umol/L,(0.0 - 6.0),10/30/2002 151F
R 03,4,62,1,0,11ALT,谷丙转氨酶(ALT),,14.0,IU/L,(5.0 - 40.0),10/30/2002 138A
R 03,4,62,1,0,12AST,谷草转氨酶(AST),,25.8,IU/L,(5.0 - 40.0),10/30/2002 1386
R 03,4,62,1,0,13ALP,碱性磷酸酶(ALP),,83.6,IU/L,(15.0 - 121.0),10/30/2002 1474
R 03,4,62,1,0,14r-GT,r-谷氨酰转移酶(r-GT),,21.0,IU/L,(5.0 - 54.0),10/30/2002 1665
R 03,4,62,1,0,15TP,总蛋白(TP),,78.5,g/L,(60.0 - 85.0),10/30/2002 103B
R 03,4,62,1,0,16ALB,白蛋白(ALB),,47.0,g/L,(40.0 - 60.0),10/30/2002 1054
R 03,4,62,1,0,17TBIL,总胆红素(T-BIL),,19.1,umol/L,(2.0 - 20.0),10/30/2002 1440
R 03,4,62,1,0,18DBIL,直接胆红素(D-BIL),H,9.3,umol/L,(0.0 - 6.0),10/30/2002 1570
R 03,4,62,1,0,21BUN,尿素氮(BUN),,5.83,mmol/L,(2.50 - 6.30),10/30/2002 121A
R 03,4,62,1,0,22UA,尿酸(UA),,249.2,umol/L,(150.0 - 430.0),10/30/2002 10BD
R 03,4,62,1,0,23CR,肌酐(CR),,94.5,umol/L,(60.0 - 120.0),10/30/2002 1043
R 03,4,62,1,0,24CA,钙(CA),,2.22,mmol/L,(2.10 - 2.60),10/30/2002 0E12
R 03,4,62,1,0,25IP,无机磷(IP),,1.42,mmol/L,(0.80 - 1.50),10/30/2002 11BC
R 03,4,62,1,0,26Mg,镁(Mg),,1.04,mmol/L,(0.66 - 1.07),10/30/2002 0E7F
R 03,4,62,1,0,27GLU,葡萄糖(GLU),,5.52,mmol/L,(3.89 - 6.10),10/30/2002 123A
R 03,4,62,1,0,33TCH,总胆固醇(TCH),H,6.32,mmol/L,(2.90 - 6.00),10/30/2002 13A2
每条数据以r开头,现在要提取第一个逗号前数据,第一,第二个逗号之间数据,第五,第六逗号之间的数字,第八,第九之间的数据
例如这条数据
R 01,1,,1,0,11ALT,谷丙转氨酶(ALT),,19.9,IU/L,(5.0 - 40.0),10/30/2002 132B
要提取数据是01、1、11、19.9这四个数据
因为每条数据是不定长,大概是68个字节左右。

解决方案 »

  1.   

    设置mscomm的属性
    mSComm1.RThreshold = 88
     MSComm1.InputLen = 88
    刚开始接收数据的时候要接收开始符
    R   73 011C ‘这行是开始的符号
    R 01,1,,1,0,11ALT,谷丙转氨酶(ALT),,19.9,IU/L,(5.0 - 40.0),10/30/2002 132B
    然后在Sub MSComm1_OnComm()里
    If MSComm1.CommEvent = comEvReceive Then
        i = i + 1
        
        strtemp = MSComm1.Input
        array4(i) = strtemp
        Text1.Text = Text1.Text + strtemp
        If i = 1 Then
            MSComm1.RThreshold = 71
            MSComm1.InputLen = 71
         End If
      End If
    以为我接收的数据存到数组里,然后再提取出来
    im ls_substring() As String '临时数组
    Dim temp_table As String '临时表变量
    Dim str As String '数组变量
    Dim ls_sql1 As String 'sql 语句
    Dim ls_sql As String 'sql语句,保存数据
    Dim j As Integer
    For j = 1 To i
        str = array4(j)    ls_substring = Split(str, ",")
        ls_bottle = ls_substring(0)
        ls_item = Trim(ls_substring(1))
        Select Case ls_item
                            Case "1": temp_table = "liver"
                            Case "2": temp_table = "liverfulltest"
                            Case "3": temp_table = "kidney"
                            Case "4": temp_table = "liverkiney"
                            Case "6": temp_table = "glu"
                            Case "7": temp_table = "blood4"
                            Case "8": temp_table = "bloodsix"
                            Case "9": temp_table = "heart"
                            Case "10": temp_table = "heargree"
        End Select
        ls_result = Trim(ls_substring(8))
        ls_code = Trim(Mid(ls_substring(5), 1, 2))      
    但是由于每行数据不定长,而我用split函数以“’”为分割ls_substring = Split(str, ",")。当接收到一定数据时,接收后的一行数据会变成“62,1,0,27GLU,葡萄糖(GLU),,5.52,mmol/L,(3.89 - 6.10),10/30/2002 123AR 03,4,62,1,0,33TCH,总胆”这样子了
    用ls_bottle = ls_substring(0)
        ls_item = Trim(ls_substring(1))
    就会不是想要提取数据了
    这里请问如何才能正确提取出想要的数据
    串口通讯问题