2012-02-25 3 views
0

나는 굉장히 효과적 인 인터넷 검색을하는 동안 아래 코드를 발견했습니다.Loadrunner C 코드 문자열 조작

아래 함수는 전달 된 구분 기호의 마지막 항목을 검색하고 입력 문자열의 나머지 부분을 반환 된 출력 문자열에 저장합니다. (Chaitanya Bhatt @ Performancecompetence.com에 대한 크레딧)

void strLastOccr(char inputStr[100], char* outputStr, char *delim) 
    { 
     char *temp, *temp2; 
     int i = 0; 
     temp = ""; 
     while (temp!=NULL) 
     { 
      if(i==0) 
      { 
       temp2 = temp; 
       temp = (char *)strtok(inputStr,delim); 
       i++; 
      } 
      if(i>0) 
      { 
       temp2 = temp; 
       temp = (char *)strtok(NULL,delim); 
      } 
      lr_save_string(temp2,outputStr); 
     } 
    } 

는 기본적으로 전달하기 위해 두 가지 새로운 옵션을 추가하려고

  1. 발생을 없음 :. 대신, 마지막 발생을 디폴트에 중단하고 나머지를 저장하는 발생 특정에 허용 문자열의.

  2. 저장할 문자열의 일부 : (왼쪽, 오른쪽) 구분 기호가 발견되면 문자열에 오른쪽이 저장됩니다. 추가 옵션은 구분 기호의 왼쪽 또는 오른쪽에 대해 사용자가 지정할 수 있도록하기위한 것입니다.

    공극 strOccr (CHAR inputStr [100]의 char * outputStr 숯불 * DELIM, INT * occrNo 숯불 * stringSide)

그래서 질문 I 위 기능에 필요한 변형이 무엇이며 ? 실제로 할 수 있습니까? 나는 그것을 유지 한 후

UPDATE

가 나는 해결책 운동을 할 수 있었다.

나는 6 시간 동안 내 자신의 질문에 답할 수 없으므로 개선 된 기능을 제공 할 수있는 사람에게 점수가 주어집니다. 특히 나는 코멘트 아래의 코드를 좋아하지 않습니다 "//문자열의 끝에 delim을 제거합니다."

void lr_custom_string_delim_save (char inputStr[500], char* outputStr, char *delim, int occrNo, int stringSide) 
{ 
    char *temp, *temp2; 
    char temp3[500] = {0}; 
    int i = 0; 
    int i2; 
    int iOccrNo = 1; 
    temp = ""; 

    while (temp!=NULL) { 
     if(i==0) { 
      temp2 = temp; 
      temp = (char *)strtok(inputStr,delim); 
      i++; 
     } 

     if(i>0) { 
      temp2 = temp; 
      temp = (char *)strtok(NULL,delim); 

      if (stringSide==0) { 
       if (iOccrNo > occrNo) { 
        strcat(temp3, temp2); 
         // Ensure an extra delim is not added at the end of the string. 
         if (temp!=NULL) { 
          // Adds the delim back into the string that is removed by strtok. 
          strcat(temp3, delim); 
         } 
       } 
      } 

      if (stringSide==1) { 
       if (iOccrNo <= occrNo) { 
        strcat(temp3, temp2); 
        strcat(temp3, delim); 
       } 
      } 
      // Increase the occurrence counter. 
      iOccrNo++; 
     } 
    } 

    // Removes the delim at the end of the string. 
    if (stringSide==1) { 
     for(i2 = strlen (temp3) - 1; i2 >= 0 
     && strchr (delim, temp3[i2]) != NULL; i2--) 
     // replace the string terminator: 
     temp3[i2] = '\0'; 
     } 

    // Saves the new string to new param. 
    lr_save_string(temp3,outputStr); 
} 
+0

무엇이 문제입니까? –

+0

당신은 무엇을 실패 했습니까? –

+3

로드 러너 (Loadrunner)가 수십 년 전 애플 IIe에서 플레이 한 비디오 게임을 언급하고 있었다고 생각합니다.에뮬레이터를 작동시킬 시간 ... –

답변

1

정말로 약간만 수정하면됩니다. strtok()로 문자열을 걷기 시작할 때 char * current, * previous라는 두 개의 변수를 저장할 수 있습니다.

새 토큰을 누르면 '현재'를 '이전'으로 이동하고 새로운 '현재'를 저장합니다. 문자열의 끝 부분에서 'previous'값을보고 마지막 요소에서 두 번째 값을 가져옵니다.

다른 옵션은 카운터를 유지하고 LoadRunner 변수 처리 메커니즘 인 lr_save_string (token_value, "LR_variable_name_")을 사용하여 의사 배열을 작성합니다. 물론 변수 이름 문자열을 먼저 만들어야합니다. 구문 분석 액션에서 빠져 나올 때 count 변수는 문자열에서 파싱 된 토큰 요소의 총 수를 보유 할 가능성이 높습니다. 그런 다음 (카운터 -1) 인덱스 값을 사용하여 문자열을 작성할 수 있습니다.

char foo[100]=""; 
... 
sprint(foo, "{LR_variable_name_%d}",counter-1); 
lr_message("My second to last element is %s",lr_eval_string(foo)); 

다른 옵션도 있지만이 두 가지가 마음에 듭니다. 또한 나는 C 형 (내 형제와 삼촌을 포함하여), "C for Dummies"에 대해 솔직하게 말하고 싶은 모든 사람들에게 권하는 책을 권합니다. LoadRunner에서 활용할 수있는 문자열 처리 프론트에는 많은 훌륭한 옵션이 있습니다.