stringlist子项中有关转义的问题

前面讲过,stringlist实际上是一个大文本,一行一个子项,子项和子项之间使用\r\n间隔,但是如果添加的子项里面也含有\r\n呢?

参见如下代码:

int sp;
b1.text="";
sp=strlist_creat(b1.text);
strlist_add(sp,"a1");
strlist_add(sp,"a2");
strlist_add(sp,"a3");
strlist_add(sp,"a4");
echo(b1.text);
echo("\r\n-----\r\n");
strlist_set(sp,1,"ins1\r\nins2");
echo(b1.text);
echo("\r\n-----\r\n");
echo(strlist_get(sp,2));//ins2

执行结果:

sHMIctrl System Run......
a1
a2
a3
a4

-----
a1
ins1
ins2
a3
a4

-----
ins2

可以看到在"a2"那一项修改的时候,内容是ins1\r\nins2 ,结果相当于一下添加了两项数据,因此在处理的时候请务必保证添加的子项内部不能含有\r\n;

如果添加的子项数据不确定是否含有\r\n的分隔符,那就需要保险起见,建议进行替换转义,比如:

str s="xxxxx";//xxxxx表示不确定字符串内容,可能含有\r\n
s=strreplace(s,"\r\n","#R#N");//将\r\n替换成#r#n

strlist_set(sp,1,s); //修改第一项

当获取内容后:

str s;
s=strlist_get(sp,1);    //获取stringlist第一项

s=strreplace(s,"#R#N","\r\n");//恢复\r\n

//此时s 就是原始的字符串