0

我编写了一个基于 Web 协议的应用程序流,其中我必须选择 20 个要下载的报告。ReportID 显示在请求中。我正在自定义请求,以便请求获取 20 个报告(报告 ID),它们是 EXCEL 或 CSV(报告输出),状态为成功(报告状态)。我已经使用 Ord=All 通过传统的“wsrp”成功捕获了 LR 参数,这是我的逻辑

int i;
int count=0;
char ro_buffer[25],rs_buffer[25];
lr_save_string("","R_buffer");

for(i=0;i<=atoi(lr_eval_string("{ReportID_count}");i++)
{
sprintf(RO_buffer,"%s",lr_paramarr_idx(ReportOutput,i))
sprintf(RS_buffer,"%s",lr_paramarr_idx(ReportStatus,i))
if((lr_eval_string(ro_buffer)=="EXCEL" || lr_eval_string(ro_buffer) =="CSV") && lr_eval_string(rs_buffer)=="S")
{
count++;
if(count>20) break;
lr_param_sprintf("R_buffer","%s%s%2c",lr_eval_string("{R_buffer}"),lr_paramarr_idx(ReportID,i));
 }
}

在上述代码中,即使条件满足,即报告输出格式为“EXCEL”或“CSV”且报告状态为“S”时,vugen 也不执行 if 块内的代码。即使从服务器响应中,我也看到根据 if 块成功推断出的值。我还使用 lr_param_sprintf 语法代替 sprintf 但情况完全相同。但没有用 无法得到缺少的点是什么.. 需要帮助..

4

2 回答 2

0

四个问题。

  1. 作为性能工程师,请在 for 循环之外将字符串转换为整数一次。我们应该像任何其他开发人员一样参与性能最佳实践

  2. 您使用 sprintf() 构建的字符串不包括 lr_eval_string("{paramname}"); 所需的大括号“{%s}”。

  3. 您的评估表达式中有 ro_buffer,但 sprintf() 表达式使用 RO_buffer (注意大写)。变量在 C 中区分大小写

  4. 您的表达式无法比较两个字符串。看看 strcmp() - 字符串比较.....

于 2015-06-12T00:34:54.777 回答
0

你想要看起来像这样的代码:

int i;
int count=0;
char ro_buffer[25],rs_buffer[25];
lr_save_string("","R_buffer");

for(i=0;i<=lr_eval_int("{ReportID_count}");i++)
{
    if (((strcmp(lr_paramarr_idx("ReportOutput",i),"EXCEL")) == 0) & ((strcmp(lr_paramarr_idx("ReportOutput",i),"CSV")) == 0) & ((strcmp(lr_paramarr_idx("ReportStatus",i),"S")) == 0)) {
        count++;
        if(count>20) break;
        lr_param_sprintf("R_buffer","%s%s%2c",lr_eval_string("{R_buffer}"),lr_paramarr_idx(ReportID,i));
    }
}

我根本没有测试过这个。您可能需要注意 ReportOutput、ReportStatus 和 ReportID 的索引,它们可能不会根据您的正则表达式对齐。您可能需要一个或两个新的“i”索引。

于 2015-06-14T23:32:12.403 回答