zoukankan      html  css  js  c++  java
  • LoadRunner截取字符串操作

    LoadRunner截取字符串操作
    
    
    
    在使用LoadRunner winsockets协议写脚本,遇到下面问题:
    
    在接收到的查询数据库的结果中我要取红色部份用于下面的select
    
    recv buf60 769
     "x01x00x00x01"
     "K"
     "x00x00x02x03"
     "def	system_db
    "
     "tb_tsbinfo
    "
     "tb_tsbinfofTskGuidebookfTskGuidebookf?"
     "x00"
     "v"
     "x00x00x00x03"
     " "
     "x00x00x00x00"
     "A"
     "x00x00x03x03"
     "def	system_db
    "
     "tb_tsbinfo
    "
     "tb_tsbinfo"
     "x07"
     "Work_ID"
     "x07"
     "Work_IDf?"
     "x00"
     "v"
     "x00x00x00x03x00x00x00x00x00"
     "G"
     "x00x00x04x03"
     "def	system_db
    "
     "tb_tsbinfo
    "
     "tb_tsbinfo
    "
     "WorkNum_ID
    "
     "WorkNum_IDf?"
     "x00"
     "v"
     "x00x00x00x03x00x00x00x00x00"
     "I"
     "x00x00x05x03"
     "def	system_db"
     "x10"
     "tb_tskdetailinfo"
     "x10"
     "tb_tskdetailinfoBatch ID"
     "x02"
     "IDf?"
     "x00"
     "v"
     "x00x00x00x03"
     "!"
     "x00x00x00x00"
     "Q"
     "x00x00x06x03"
     "def	system_db"
     "x10"
     "tb_tskdetailinfo"
     "x10"
     "tb_tskdetailinfo	BatchName	BatchNamef!"
     "x00"
     ","
     "x01x00x00xfdx00x00x00x00x00"
     "C"
     "x00x00x07x03"
     "def	system_db
    "
     "tb_tsbinfo
    "
     "tb_tsbinfoBlock_IDBlock_IDf?"
     "x00"
     "v"
     "x00x00x00x03x00x00x00x00x00"
     "I"
     "x00x00"
     ""
     "x03"
     "def	system_dbftb_blockinfoftb_blockinfo	BlockName	BlockNamef!"
     "x00x96x00x00x00xfdx00x00x00x00x00"
     "G"
     "x00x00"
     "	"
     "x03"
     "def	system_dbftb_blockinfoftb_blockinfoModel_IDModel_IDf?"
     "x00"
     "v"
     "x00x00x00x03x00x00x00x00x00x05x00x00"
     "
    "
     "xfex00x00"
     """
     "x00x15x00x00"
     "v"
     "x01"
     "5"
     "x01"
     "4"
     "x01"
     "7"
     "x01"
     "7"
     "x04"
     "8227"
     "x01"
     "6"
     "x03"
     "DAY"
     "x01"
     "3"
     "x15x00x00"
     "f"
     "x01"
     "5"
     "x01"
     "4"
     "x01"
     "7"
     "x01"
     "7"
     "x04"
     "8227"
     "x01"
     "5"
     "x03"
     "NEW"
     "x01"
     "3"
     "x18x00x00"
     "
    "
     "x01"
     "6"
     "x01"
     "1"
     "x01"
     "5"
     "x01"
     "5"
     "x04"
     "0502"
     "x01"
     "4"
     "x06"
     "鏁板瓧"
     "x01"
     "2"
     "x1ax00x00x0ex01"
     "9"
     "x01"
     "1"
     "x02"
     "11"
     "x02"
     "11"
     "x04"
     "1601"
     "x01"
     "4"
     "x06"
     "鏁板瓧"
     "x01"
     "2"
     "x1ax00x00x0fx01"
     "9"
     "x01"
     "1"
     "x02"
     "11"
     "x02"
     "11"
     "x04"
     "1601"
     "x01"
     "1"
     "x06"
     "鍦板潃"
     "x01"
     "2"
     "x05x00x00x10xfex00x00"
     """
     "x00"
    
    send buf61 54
     "2"
     "x00x00x00x03"
     "select `BlockNO` from `tb_blockinfo` where `ID`=6"
    
    写关联语句:
    
    lrs_save_searched_string("socket3",NULL,"Block_ID","LB/BIN=\x01","RB/BIN=\x03",8,0,-1);
    
    执行发现关联的值不对。检查,发现传回的结果为:
    
    
     "x01x00x00x01"
     "K"
     "x00x00x02x03"
     "def	system_db
    "
     "tb_tsbinfo
    "
     "tb_tsbinfofTskGuidebookfTskGuidebookf?"
     "x00"
     "v"
     "x00x00x00x03"
     " "
     "x00x00x00x00"
     "A"
     "x00x00x03x03"
     "def	system_db
    "
     "tb_tsbinfo
    "
     "tb_tsbinfoaWork_IDaWork_IDf?"
     "x00"
     "v"
     "x00x00x00x03x00x00x00x00x00"
     "G"
     "x00x00x04x03"
     "def	system_db
    "
     "tb_tsbinfo
    "
     "tb_tsbinfo
    "
     "WorkNum_ID
    "
     "WorkNum_IDf?"
     "x00"
     "v"
     "x00x00x00x03x00x00x00x00x00"
     "I"
     "x00x00x05x03"
     "def	system_db"
     "x10"
     "tb_tskdetailinfo"
     "x10"
     "tb_tskdetailinfoBatch ID"
     "x02"
     "IDf?"
     "x00"
     "v"
     "x00x00x00x03"
     "!"
     "x00x00x00x00"
     "Q"
     "x00x00x06x03"
     "def	system_db"
     "x10"
     "tb_tskdetailinfo"
     "x10"
     "tb_tskdetailinfo	BatchName	BatchNamef!"
     "x00"
     ","
     "x01x00x00xfdx00x00x00x00x00"
     "C"
     "x00x00"
     "a"
     "x03"
     "def	system_db
    "
     "tb_tsbinfo
    "
     "tb_tsbinfoBlock_IDBlock_IDf?"
     "x00"
     "v"
     "x00x00x00x03x00x00x00x00x00"
     "I"
     "x00x00"
     ""
     "x03"
     "def	system_dbftb_blockinfoftb_blockinfo	BlockName	BlockNamef!"
     "x00x96x00x00x00xfdx00x00x00x00x00"
     "G"
     "x00x00"
     "	"
     "x03"
     "def	system_dbftb_blockinfoftb_blockinfoModel_IDModel_IDf?"
     "x00"
     "v"
     "x00x00x00x03x00x00x00x00x00x05x00x00"
     "
    "
     "xfex00x00"
     """
     "x00x16x00x00"
     "v"
     "x01"
     "2"
     "x01"
     "3"
     "x01"
     "2"
     "x01"
     "2"
     "x04"
     "8227"
     "x02"
     "10"
     "x03"
     "TWO"
     "x01"
     "4"
     "x15x00x00"
     "f"
     "x01"
     "2"
     "x01"
     "3"
     "x01"
     "2"
     "x01"
     "2"
     "x04"
     "8227"
     "x01"
     "9"
     "x03"
     "ONE"
     "x01"
     "4"
     "x18x00x00"
     "
    "
     "x01"
     "3"
     "x01"
     "1"
     "x01"
     "1"
     "x01"
     "1"
     "x04"
     "0001"
     "x01"
     "1"
     "x06"
     "鍦板潃"
     "x01"
     "2"
     "x18x00x00x0ex01"
     "3"
     "x01"
     "1"
     "x01"
     "1"
     "x01"
     "1"
     "x04"
     "0001"
     "x01"
     "4"
     "x06"
     "鏁板瓧"
     "x01"
     "2"
     "x05x00x00x0fxfex00x00"
     """
     "x00"
    经观查是改变了
    
    在
    
     "x04"
     "8227"
     "x02"
     "10"
    中x04和x02表示的是后面字符的位数,如是一位就是x01,如是三位就是x03。
    
    这个查表返回的结果中有8列,我要取的是第一行第六列的值。
    
    观查后将关联语句改为:
    
    lrs_save_searched_string("socket3",NULL,"Block_ID","LB/BIN=\v","RB/BIN=\r",7,0,-1);
    
    取得结果为:
    
    x012x013x012x012x048227x0210x03TWOx014x15x00x00fx012x013x012x012x048227x019x03ONEx014x18x00x00
    
    我要取得的值在第六个“”后。写语句:
    
    char *Block;
    int i;
    int k;
    int len;//要取值的长度
    char Block_str[100];
    char Block_len[5];
    Block=lr_eval_string("<Block_ID>");
    
    for(k=1;k<=6;)
     {
      i=i+1;
    
      if(Block[i]=='x')
    
       k=k+1;
     }
    
    strncpy(Block_len,Block+i-1,4);
    
    lrs_hex_string_to_int(Block_len,1,&len);
    
    strncpy(Block_str,Block+i+3,s);
    lr_output_message ("Block= %s",Block_str);
    
    取得想要的结果。整理脚本如下:
    
    char *Block;
    int i;
    int k;
    int len;//要取值的长度
    char Block_str[100];
    char Block_len[5];
    
    lrs_save_searched_string("socket3",NULL,"Block_ID","LB/BIN=\v","RB/BIN=\r",7,0,-1);
    Block=lr_eval_string("<Block_ID>");
    
    //取得第六个x的位置
    
    for(k=1;k<=6;)
     {
      i=i+1;
    
      if(Block[i]=='x')
    
       k=k+1;
     }
    
    strncpy(Block_len,Block+i-1,4);//截/x开始四位
    
    lrs_hex_string_to_int(Block_len,1,&len);//转为int
    
    strncpy(Block_str,Block+i+3,s);
    lr_output_message ("Block= %s",Block_str);
    
    在往下的脚本编写过程中发现还需要类似的工作,直接写了个函数,如下:
    
    //str,被查找的字符串;n,第几个;c查找的字符
    char *strn(char *str,int n,char c){
     int nlen;//要截取串的长度,十进制数
     char rstr[30]="";//截取出的串
     char *retu=NULL;//要返回的值
     char str_nlen[5]="";//要截取串的长度,字符
     int len=0;//str长度
     int i=0;//第几位,计数
     int k=1;//第几个,计数
    
    // lr_output_message ("str= %s",str);
     len=strlen(str);//取得str的长度
     //查找第n个X的位置
     for(k=1;k<=n;)
      {
       i=i+1;
       if(str[i]==c)//判断字符是否为c
        k=k+1;
       if(i+3>len)
        return 0;//找到末尾条件还是不满足,返回空
      }
    
     strncpy(str_nlen,str+i-1,4);//截取x0n,即我们所要取的值的长度,字符串
    
    // lr_output_message ("str_nlen= %s",str_nlen);
    
     lrs_hex_string_to_int(str_nlen,1,&nlen);//将str_len转为十进制数,放入len 中
    
    // lr_output_message ("要截取的长度为= %d",nlen);
    
     strncpy(rstr,str+i+3,nlen);//截取我们所需要的数据
    
    // lr_output_message ("rstr为= %s",rstr);
    
     retu=rstr;
    
     return retu;
    }
    
    
    
    
    
    说一下strncpy函数,有两种格式
    
    char *strncpy(char *dest, char *src, int n);
    
    char *strncpy( strtemp,str+n , m )
    
    --strtemp字符串变量,截取后的字符串存放处
    
    --str 字符串变量,要截取的字符串
    
    --n ,int 型,
    
    -- str+n, 表示从第n 位开始截取字符串
    
    --m,int型,表示截取m位
    
  • 相关阅读:
    NGINX基本概念
    IP地址进制转换
    路由
    ip ,网段, 网关
    ipaddress模块
    第53课 被遗弃的多重继承(上)
    const static valitate 区别
    第49课 多态的概念和意义 (虚函数virtual)
    第75课 图的遍历(深度优先遍历DFS)
    第74课 图的遍历(广度优先遍历BFS)
  • 原文地址:https://www.cnblogs.com/qmfsun/p/4575457.html
Copyright © 2011-2022 走看看