51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 4869|回复: 9
打印 上一主题 下一主题

[原创] LR中有什么函数来截取字符串?

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2009-5-6 10:53:33 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
LR中有什么函数来截取字符串?
"\x012\x013\x012\x012\x048227\x019\x03ONE\x014\x16\x00\x00\f\x012\x013\x012\x012\x048227\x0210\x03TWO\x014\x18\x00\x00"
我想截出x019
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

  • TA的每日心情

    2016-12-30 10:59
  • 签到天数: 6 天

    连续签到: 1 天

    [LV.2]测试排长

    2#
    发表于 2009-5-6 12:24:00 | 只看该作者
    strncpy()
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    3#
    发表于 2010-1-8 14:38:46 | 只看该作者
    土匪快说说
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    4#
    发表于 2010-1-8 17:21:45 | 只看该作者
    找出x019的左右分隔标识符,然后使用C语言的字符处理函数。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    5#
    发表于 2010-1-8 18:55:10 | 只看该作者
    memcpy  和sprintf    两个函数各有各的好处

    我经常用sprintf
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    6#
    发表于 2010-1-8 19:04:30 | 只看该作者
    strtok()或者用lr_save_var()
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    7#
    发表于 2010-1-9 10:57:17 | 只看该作者
    /* FUNCTIONS */
    void save_search_string(char *buf, char *leftBound, char *rightBound, char *PreFix)
    {
             int i,j,k,intTmp, offsetA, offsetB;
             char *strTmpA;
             char *strTmpB;
             char *strTmpC;
             char *strTmpD;
             char *strPos;
             intTmp = strlen(buf) + 1;
             if ((strTmpA = (char *)malloc(intTmp * sizeof(char))) == NULL) {
                    lr_output_message("Insufficient memory available");
                    return;
              }
             if ((strTmpB = (char *)malloc(intTmp * sizeof(char))) == NULL) {
                    lr_output_message("Insufficient memory available");
                    return;
              }
             if ((strTmpC = (char *)malloc(intTmp * sizeof(char))) == NULL) {
                    lr_output_message("Insufficient memory available");
                    return;
              }
             if ((strTmpD = (char *)malloc(intTmp * sizeof(char))) == NULL) {
                    lr_output_message("Insufficient memory available");
                    return;
              }
             i = 0;
                    strPos = (char *)strstr(buf, leftBound);
             if(strPos != NULL){
              offsetA = (int)(strPos - buf);
             }
             else offsetA = -1;
             strPos = (char *)strstr(buf, rightBound);
             if(strPos != NULL) offsetB = (int)(strPos - buf);
             else offsetB = -1;
             if((offsetA < 0)||(offsetB < 0)){
              sprintf(strTmpC, "%s_count", PreFix);
                            lr_save_string ("0", strTmpC);
              free(strTmpA);
              free(strTmpB);
              free(strTmpC);
              free(strTmpD);
              return;
             }
                    if(offsetA < offsetB){
                            memcpy(strTmpA, buf + offsetA + strlen(leftBound), offsetB - offsetA - strlen(leftBound));
                            sprintf(strTmpA + offsetB - offsetA - strlen(leftBound), "\x0");
              i++;
              sprintf(strTmpC, "%s_%d", PreFix, i);
                            lr_save_string (strTmpA, strTmpC);
              if(strlen(buf) > (offsetB + strlen(rightBound))){
               memcpy(strTmpB, buf + offsetB + strlen(rightBound), strlen(buf) - offsetB - strlen(rightBound));
               sprintf(strTmpB + strlen(buf) - offsetB - strlen(rightBound), "\x0");
              }
              else sprintf(strTmpB, "");
                    }
             if(offsetA > offsetB){
              memcpy(strTmpB, buf + offsetB + strlen(rightBound), strlen(buf) - offsetB - strlen(rightBound));
              sprintf(strTmpB + strlen(buf) - offsetB - strlen(rightBound), "\x0");
             }
             
             while(strcmp(strTmpB, "") != 0){
              strPos = (char *)strstr(strTmpB, leftBound);
              if(strPos != NULL) offsetA = (int)(strPos - strTmpB);
                            else offsetA = -1;
              strPos = (char *)strstr(strTmpB, rightBound);
              if(strPos != NULL) offsetB = (int)(strPos - strTmpB);
              else offsetB = -1;
              if((offsetA < 0)||(offsetB < 0)){
               sprintf(strTmpC, "%s_count", PreFix);
               sprintf(strTmpD, "%d", i);
               lr_save_string (strTmpD, strTmpC);
               free(strTmpA);
               free(strTmpB);
               free(strTmpC);
               free(strTmpD);
               return;
              }
              if(offsetA < offsetB){
               memcpy(strTmpA, strTmpB + offsetA + strlen(leftBound), offsetB - offsetA - strlen(leftBound));
               sprintf(strTmpA + offsetB - offsetA - strlen(leftBound), "\x0");
               i++;
               sprintf(strTmpC, "%s_%d", PreFix, i);
               lr_save_string (strTmpA, strTmpC);
               sprintf(strTmpC, "%s_count", PreFix);
               sprintf(strTmpD, "%d", i);
               lr_save_string (strTmpD, strTmpC);
               if(strlen(buf) > (offsetB + strlen(rightBound))){
                    memcpy(strTmpC, strTmpB + offsetB + strlen(rightBound), strlen(strTmpB) - offsetB - strlen(rightBound));
                    sprintf(strTmpC + strlen(strTmpB) - offsetB - strlen(rightBound), "\x0");
               }
               else sprintf(strTmpC, "");
              }
              if(offsetA > offsetB){
               memcpy(strTmpC, strTmpB + offsetB + strlen(rightBound), strlen(strTmpB) - offsetB - strlen(rightBound));
               sprintf(strTmpC + strlen(strTmpB) - offsetB - strlen(rightBound), "\x0");
              }
              sprintf(strTmpB, "%s", strTmpC);
              
             }
             free(strTmpA);
             free(strTmpB);
             free(strTmpC);
             free(strTmpD);
        return;
    }
    //==================================
    使用方法:

       sendBuf 和 recvBuf 等变量定义略...

      //save_search_string(返回变量,左边界,右边界,参数名);
      save_search_string(recvBuf,"<ORDER_ID type=\"string\">","</ORDER_ID>","Search_Id");
        if(strcmp("ok!", lr_eval_string ("{RespondCode_1}")) == 0)
            {
                    lr_message("Pass!");
            }
            else
            {
                    lr_message("Fail!");
            }
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    8#
    发表于 2010-8-12 11:56:13 | 只看该作者
    lr_save_sting("\x012\x013\x012\x012\x048227\x019\x03ONE\x014\x16\x00\x00\f\x012\x013\x012\x012\x048227\x0210\x03TWO\x014\x18\x00\x00","temp");
    lr_save_var(lr_eval_string("{temp}")+30,4,“result”);
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    9#
    发表于 2010-8-12 13:25:48 | 只看该作者
    8#的脚本十分强大
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2022-5-8 19:23
  • 签到天数: 137 天

    连续签到: 1 天

    [LV.7]测试师长

    10#
    发表于 2010-8-12 13:36:54 | 只看该作者
    收藏,备用!
    回复 支持 反对

    使用道具 举报

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

    GMT+8, 2024-11-9 10:30 , Processed in 0.072214 second(s), 25 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

    快速回复 返回顶部 返回列表