在开发脚本过程中,经常会涉及到字符串的复制与替换处理,相较于C语言,CAPL中做了些许改动,并提供了一些范例供我们学习,方便我们更加快速的去完成脚本开发。下面介绍的主要是字符串的复制与替换,我们使用的时候只需要按照范例进行修改即可。
目录
复制字符串
mbstrncpy & mbstrncpy_off
代码示例
mbsubstr_cpy & mbsubstr_cpy_off
代码示例
strncpy
代码示例
strncpy_off
代码示例
substr_cpy
代码示例
substr_cpy_off
代码示例
strncat
代码示例
snprintf
代码示例
str_replace
代码示例
str_replace_regex
代码示例
功能:将字符串复制到另一个字符串;
说明:
mbstrncpy函数将src复制到dest。len表示应复制的字符数;使用-1表示应尽可能多地复制到dest中(最多复制到src结尾)。该函数确保有一个终止的0字节;但与strncpy不同的是,该字节不计入len。
mbstrncpy_off函数覆盖目标缓冲区中从字符偏移destOffset开始的字符。
dest:要存入的字符串buffer
src:被复制的字符串buffer
len:要复制的字符数,或-1以尽可能多地复制
destOffset:复制的字符串放在destOffset之后
char s1[50] = "eine grüne ";
char s2[10] = "Türen";
mbstrncpy_off(s1, 11, s2, 3);
write("%s", s1);
//输出结果
// german for 'a green'
// german for 'doors'
// eine grüne Tür
功能:将子字符串复制到另一个字符串
说明:
mbsubsrt_cpy将src的子字符串复制到dest。len表示应复制的字符数;使用-1表示应尽可能多地复制到dest中(最多复制到src结尾)。该函数确保有一个终止的0字节;但与substracpy/substracpy_off不同,该字节不计入len。
mbsubst_cpy_off覆盖目标缓冲区中从字符偏移destOffset开始的字符。
dest:要存入的字符串buffer
src:被复制的字符串buffer
len:要复制的字符数,或-1以尽可能多地复制
srcStart:在子字符串的src中以字符开始索引
destOffset:目标缓冲区中的字符偏移量
char s1[50] = "eine grüne ";
char s2[20] = "schöne Türen";
mbsubstr_cpy_off(s1, 11, s2, 7, 3);
write("%s", s1);
//输出结果
// german for 'a green'
// german for 'beautiful doors'
// eine grüne Tür (german for 'a green door')
功能:将一个字符串复制到另一个字符串;此函数将src复制到dest,max表示dest的大小(以字节为单位)。该函数确保存在终止“\0”;最多复制max-1个字节。
注意:根据字符串编码,字符可能需要几个字节,例如Windows ANSI(932)编码中的日语字符或UTF-8编码中的任何特殊字符,在这种情况下,最好使用函数mbstrncpy。
dest:要存入的字符串buffer
src:被复制的字符串buffer
max:
最大复制字节数。
不能大于dest的大小。
最多复制max-1个字节。
如果src长度小于dest,则复制字节直到遇到终止的“\0”。
variables {
char s1[7] = "Vector";
char s2 [32];
}
on key 'z'
{
strncpy (s2,s1,elcount(s2));
write ("Result: %s",s2);
}
//输出结果
//Result: Vector
功能:将一个字符串复制到另一个字符串;
说明:将src复制到dest。max表示dest的大小(以字节为单位);该函数确保存在终止“\0”,最多复制max-1-destOffset字节;从destOffset开始,在dest中覆盖字节。
dest:要存入的字符串buffer
destOffset:目标缓冲区中的偏移量
src:被复制的字符串buffer
max:
用于确定复制的最大字节数。
不能大于dest的大小。最多复制max-1-destOffset字节。
如果src长度小于dest,则复制字节直到遇到终止的“\0”。
char s[6] = "Hello";
strncpy_off(s, 1, "e", elcount(s));
//输出结果
// s: He
功能:将一个字符串复制到另一个字符串;此函数将src的子字符串复制到dest。max表示dest的大小(以字节为单位)。该函数确保存在终止“\0”。因此,最多复制max-1个字节。
注意:根据字符串编码,字符可能需要几个字节,例如Windows ANSI(932)编码中的日语字符或UTF-8编码中的任何特殊字符,在这种情况下,最好使用函数mbsubstr_cpy。
dest:要存入的字符串buffer
src:被复制的字符串buffer
srcStart:子字符串src中的起始索引未知
len:子字符串的长度(以字节为单位),或-1复制字符串直到结尾
max:目标字符串大小
char s1[7];
char s2[18] = "Vector Informatik";
substr_cpy(s1, s2, 0, 6, elcount(s1));
//输出结果
// s1: Vector
功能:将一个字符串复制到另一个字符串;此函数将src的子字符串复制到dest。max表示dest的大小(以字节为单位)。该函数确保存在终止“\0”。因此,最多复制max-1-destOffset字节。
注意:根据字符串编码,字符可能需要几个字节,例如Windows ANSI(932)编码中的日语字符或UTF-8编码中的任何特殊字符,在这种情况下,最好使用函数mbsubstr_cpy_off。
dest:要存入的字符串buffer
destOffset:将字符串复制到dest中的起始字节
src:被复制的字符串buffer
srcStart:子字符串src中的起始索引未知
len:子字符串的长度(以字节为单位),或-1复制字符串直到结尾
max:目标字符串大小
char s1[9] = "New CAPL";
char s2[18] = "Vector Informatik";
substr_cpy_off(s2, 7, s1, 4, -1, elcount(s2));
write("s2: %s", s2);
//输出结果
//s2: Vector CAPL
功能:将源字符串复制并放在目标字符串中已有字符后;此函数将src附加到dest。len表示复合字符串的最大长度。该函数确保存在终止“\0”。因此,最多复制len-strlen(dest)-1个字符。
注意:跟c语言中的strncat不同,len表示复合字符串的最大长度,包括终止的“\0”,而不是要附加的字符数。
dest:要存入的字符串buffer
src:被复制的字符串buffer
len:复合字符串的最大长度,包括终止“\0”。
char s[20];
strncpy(s, "Vector", 10);
write("s is %s", s);
strncat(s, " CANoe", 19);
write("s is %s", s);
strncpy(s, "Vector", 10);
write("s is %s", s);
strncat(s, " CANoe", 11);
write("s is %s", s);
//输出结果
// s is "Vector"
// s is "Vector CANoe"
// s is "Vector"
// s is "Vector CAN"
功能:将格式化字符串打印到字符数组,此函数对应于C函数sprintf。作为补充,参数len表示数组dest的最大长度。
注意:CAPL支持最多64个参数的函数调用。
dest:要打印到的字符缓冲区。
len:打印到缓冲区的最大字符数,包括终止“\0”,必须最多为缓冲区的大小。
format:打印到缓冲区的格式化字符串。
char buffer[100], str[7] = "Vector";
long i;
i = snprintf(buffer,elcount(buffer),"String: %s\n", str);
write("Output:\n%s : Character count = %d\n", buffer, i);
功能:用另一个字符串替换字符串中出现的所有文本;用另一个字符串替换字符串的一部分。
s:被修改的字符串
searched:应替换的字符串
startoffset:s中的起始替换位置
replacement:替换原始字符的字符串
length:要替换的最大字符数
返回值:
1:如果替换成功则返回1
0:如果生成的字符串对于s缓冲区太长,则为0。
char buffer[70] = "Vector Informatik";
str_replace(buffer, "Informatik", "CANoe");
write(buffer);
str_replace(buffer, 7, "CANalyzer", 10);
write(buffer);
//输出结果
//CANoe Informatik
//Vector CANalyzer
功能:用另一个字符串替换字符串中出现的所有字符。
s:要修改的字符串
pattern:正则表达式
replacement:替换部分的示例
char buffer[70] = "Vector Informatik";
str_replace_regex(buffer, "Inf[a-z]*", "CANoe");
write(buffer);