我必须从字符串中读取并提取一些值。 这些值的编码如下:
k="11,3,1" v="140.3"
我已经定义了代码并创建了包含所有字段的结构以及存储k和v的临时结构。在{{1}} proc中,我将值从temp结构转移到右结构(使用有效类型) 。
它有效,但我有很多字段,fillFields
需要很多fillFields
。也许有人可以给我任何暗示如何更聪明地写它。
现在简化的代码:
if-conditions
答案 0 :(得分:1)
不是将文本值保存在pElem
中,而是保存转换后的值。
这会在解析k="11,3,1" v="140.3"
时创建一个额外的步骤,将文本转换为枚举类型,但它只需支付一次。 fillFields()
调用然后运行更简单。假设您有更多ticP
个变量,那就是胜利。
typedef enum pElem_type {
pElem_None, pElem_ASK, pElem_BID, pElem_CLOSE, pElem_N
} pElem_type;
typedef struct pElem {
pElem_type type;
float value;
} pElem;
void fillFields(ticP t, const pElem *p) {
switch (p->type) {
case pElem_ASK:
printf("ASK %f\n", p->value);
t->ask = p->value;
break;
case pElem_BID:
printf("BID %f\n", p->value);
t->bid = p->value;
break;
case pElem_CLOSE:
printf("Close %f\n", p->value);
t->close = p->value;
break;
default:
printf("Error\n");
}
}
// Further simplifications possible
typedef struct tic {
float field[pElem_N];
}tic, *ticP;
static const char *FieldName[pElem_N] = {
"None", "ASK", "BID", "Close"
};
void fillFields(ticP t, const pElem *p) {
if (p->type < pElem_N) {
printf("%s %f\n", FieldName[p->type], p->value);
t->field[p->type] = p->value;
}
}