Loadrunner C Код Строка Манипуляции - PullRequest
0 голосов
/ 26 февраля 2012

Я наткнулся на приведенный ниже код во время поиска в Google, который прекрасно работает. (Благодарим Чайтанью Бхатт @ 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. Часть строки, которую нужно сохранить: (Влево, Вправо) В данный момент строка сохраняет правую сторону, как только найден разделитель. Дополнительная опция предназначена для того, чтобы пользователь мог указать для левой или правой стороны разделителя найден.

    void strOccr (char inputStr [100], char * outputStr, char * delim, int * occrNo, char * stringSide)

Итак, вопрос в том, какие модификации мне нужны для вышеуказанной функции? И действительно ли это возможно сделать?

UPDATE

После того, как я продолжил, я смог найти решение.

Поскольку я не могу ответить на свой вопрос в течение еще 6 часов, будут начисляться баллы тому, кто может обеспечить улучшенную функцию. В частности, мне не нравится код под комментарием "// Удаляет разделитель в конце строки."

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);
}

1 Ответ

1 голос
/ 27 февраля 2012

Вам действительно нужно всего лишь внести несколько изменений.Когда вы начинаете обходить строку с помощью strtok (), вы можете хранить две переменные: char * current, * previous.

Когда вы нажимаете каждый новый токен, перемещаете «текущий» в «предыдущий» и сохраняете новый «текущий»«.В конце анализа строки посмотрите на значение «предыдущий», чтобы получить второй из последнего элемента.

Другие параметры, сохраните счетчик и создайте псевдомассив, используя механизм обработки переменных LoadRunner, lr_save_string (token_value"LR_variable_name_").Конечно, вам нужно сначала создать строку с именем переменной.Когда вы выходите из действия разбора, ваша переменная count, скорее всего, будет содержать общее количество элементов токена, проанализированных из строки, и затем вы можете использовать значение индекса (counter-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));

Возможно, есть и другие варианты, но эти два, которые приходят на ум.Кроме того, я рекомендую вам книгу, которую я рекомендую всем, кто хочет освежить свой С (включая моего брата и моего дядю), «С для чайников».Здесь есть много отличных опций для обработки строк, которые вы можете использовать в LoadRunner.

...