ACK:QRY CALL ACNTINFO:RETN=0,DESC=操作成功,ATTR=USERNAME&CERTIFICATE&CALLINGNUMBER&USERLEVEL&APPLYMEALTYPE&CURRENTMEALTYPE&FREECITYLEFT&FREECOUNTRYLEFT&FREEHMTLEFT&FREEINTERLEFT&MEALAPPLYMONTHS&ACCOUNTLEFT&BOUNTYLEFT&ACCOUNTPREMONTH&ACCOUNTNOWMONTH&ACCOUNTTOTAL&CALLRIGHTTYPE&NEWSERVICE&LANGUAGETYPE&CARDLEVEL&DAYACCOUNT&MONTHACCOUNT&DAYACCOUNTLEFT&MONTHACCOUNTLEFT&SERVICESTATE&USESTATE&DISTRICTID&SCP&RENTDEDUCTMTH&DAYFEEDEDUCTDATE&NEWSERDEDUCTMTH&MEALFEEDEDUCTTIM&KEEPSTARTDATE&KEEPDAYS&IFUSECALLPIN&CALLPINNUMBER&IFHAVEFAMINO&FAMNOMODISUM&REGISTERDATETIME&SERVICESTART&SERVICESTOP&FEESHOW&SHOWTERMINAL,RESULT=徐东元|652325197910121011|09917897741|1|0|0|0|0|0|0|0|-65|0|0|0|0|0011|0|1|0|0|0|0|0|6|0|1|101|00000000|00000000|00000000|00000000000000|00000000|0|0|636697|0|0|20041223101152|20041223|20041223|0|   853B6EDA
以上是一个字符串 其中的ATTR=后面跟的是一些变量的名字,用&隔开 result=后面跟的是变量值 分别对应前面的每个变量  求一个函数 功能是能够根据输入变量名,获得该变量的值 谢谢

解决方案 »

  1.   

    用instr找到ATTR=跟result=的位置,再用split分隔
      

  2.   

    Private Sub Command1_Click()
    Dim i As Long
    Dim str As String
    Dim temparr1() As String, temparr2() As String
    Dim attrINT As Long, resultINT As Long
    Dim attrSTR As String, resultSTR As Stringstr = "ACK:QRY CALL ACNTINFO:RETN=0,DESC=操作成功,ATTR=USERNAME&CERTIFICATE&CALLINGNUMBER&USERLEVEL&APPLYMEALTYPE&CURRENTMEALTYPE&FREECITYLEFT&FREECOUNTRYLEFT&FREEHMTLEFT&FREEINTERLEFT&MEALAPPLYMONTHS&ACCOUNTLEFT&BOUNTYLEFT&ACCOUNTPREMONTH&ACCOUNTNOWMONTH&ACCOUNTTOTAL&CALLRIGHTTYPE&NEWSERVICE&LANGUAGETYPE&CARDLEVEL&DAYACCOUNT&MONTHACCOUNT&DAYACCOUNTLEFT&MONTHACCOUNTLEFT&SERVICESTATE&USESTATE&DISTRICTID&SCP&RENTDEDUCTMTH&DAYFEEDEDUCTDATE&NEWSERDEDUCTMTH&MEALFEEDEDUCTTIM&KEEPSTARTDATE&KEEPDAYS&IFUSECALLPIN&CALLPINNUMBER&IFHAVEFAMINO&FAMNOMODISUM&REGISTERDATETIME&SERVICESTART&SERVICESTOP&FEESHOW&SHOWTERMINAL,RESULT=徐东元|652325197910121011|09917897741|1|0|0|0|0|0|0|0|-65|0|0|0|0|0011|0|1|0|0|0|0|0|6|0|1|101|00000000|00000000|00000000|00000000000000|00000000|0|0|636697|0|0|20041223101152|20041223|20041223|0|   853B6EDA"
    attrINT = InStr(LCase(str), "attr=")
    resultINT = InStr(LCase(str), "result=")
    attrSTR = Mid(str, attrINT + 5, resultINT - attrINT - 6)
    resultSTR = Mid(str, resultINT + 7)temparr1 = Split(attrSTR, "&")
    temparr2 = Split(resultSTR, "|")For i = 0 To UBound(temparr1)
        Debug.Print temparr1(i) & "=" & temparr2(i)'打印出来
    Next i
    End Sub
      

  3.   

    KAO,我也写了,太慢了
    还没测试,不知道对不对,汗!'str1 存放此字符串'分别存放变量名和变量值的全局数组
    dim varname() as string
    dim varvalue() as string
    ……
    对字符串进行处理,放在两个数组里
    dim intTmp1 as integer,intTmp2 as integer
    intTmp1 = instr(str1,"ATTR=")'"ATTR="第一字母在字符串的位置
    intTmp2 = instr(str1,"RESULT=")'"RESULT="第一字母在字符串的位置
    varname = split(mid(str1,intTmp1+5,intTmp2-intTmp1-7), "&")
    varvalue = split(right(str1,len(str1)-intTmp2-6), "|")function getValue(byval vname as string) as string
       dim i as integer
       for i = 0 to UBound(varname)
          if vname = varname(i) then
             getValue = varvalue(i)
             exit function
          end if
       next
    end function
      

  4.   

    发现 viena抢分功力大有进步,呵呵
      

  5.   

    //发现 viena抢分功力大有进步,呵呵
    菜鸟抢分又佳口阿
      

  6.   

    viena:还是不行啊 报错误 说函数未定义 varvalue
      

  7.   

    varvalue()是在模块级定义的全局数组,'分别存放变量名和变量值的全局数组
    dim varname() as string
    dim varvalue() as string
    要写在最顶端,所有子程序和函数的外面的
      

  8.   

    有个小错误,
    varname = split(mid(str1,intTmp1+5,intTmp2-intTmp1-7), "&")
                                                应该是-6更正为:'str1 存放此字符串,和varname()、varvalue()一样,是全局变量'分别存放变量名和变量值的全局数组
    '要写在最顶端,所有子程序和函数的外面的
    dim varname() as string
    dim varvalue() as string'对字符串进行处理,放在两个数组里
    '对于str1只需调用一次此Sub,产生两个数组待用
    sub dealStr()
       dim intTmp1 as integer,intTmp2 as integer
       intTmp1 = instr(str1,"ATTR=")'"ATTR="第一字母在字符串的位置
       intTmp2 = instr(str1,"RESULT=")'"RESULT="第一字母在字符串的位置
       varname = split(mid(str1,intTmp1+5,intTmp2-intTmp1-7), "&")
       varvalue = split(right(str1,len(str1)-intTmp2-6), "|")
    end subfunction getValue(byval vname as string) as string
       dim i as integer
       for i = 0 to UBound(varname)
          if vname = varname(i) then
             getValue = varvalue(i)
             exit function
          end if
       next
    end function
      

  9.   

    忘记改错误了,晕
    sub dealStr()
       dim intTmp1 as integer,intTmp2 as integer
       intTmp1 = instr(str1,"ATTR=")'"ATTR="第一字母在字符串的位置
       intTmp2 = instr(str1,"RESULT=")'"RESULT="第一字母在字符串的位置
       varname = split(mid(str1,intTmp1+5,intTmp2-intTmp1-7), "&")
       varvalue = split(right(str1,len(str1)-intTmp2-6), "|")
    end subfunction getValue(byval vname as string) as string
       dim i as integer
       for i = 0 to UBound(varname)
          if vname = varname(i) then
             getValue = varvalue(i)
             exit function
          end if
       next
    end function
      

  10.   

    function aas(Str as string)
    dim aa,bb
    aa=split(ATTR,"&")
    bb=split(RESULT,"|")
    for i=0 to ubound(aa)
        if cstr(aa(i))=Str then
           aas=bb(i)
           exit for
        end if
    next i
    end function
    不知道你为什么那么复杂
    直接分解就可以得到两个数组,且两个数组的对应的元素就是你想要的值
    aa里存放着变量名,bb里存放着值
      

  11.   

    楼上看清题再说话
    楼主给出的整个是一个字符串,ATTR和RESULT都是其中的字符,而不是变量~