CAPL编程_03
1_文件操作的相关函数:
读文本文件内容
- 读取文本文件操作的三部曲
1)打开文件 —— openFileRead ( )
2)逐行读取 —— fileGetString ( ) 、fileGetStringSZ ( )
3)关闭文件 —— fileClose ( )
char content[100]; // 写入数据
dword fh; //句柄//文本字符的数据用0(0代表覆盖写入),二进制(字节)数据用1
//文本数据不想被覆盖用2(2代表追加写入),二进制用3
fh = openFileRead("Data.txt",0);fileGetstring(content,elCount(content),fh);
fileClose(fh); //释放资源,关闭写入
on key 'a' {char cont[100]; // 装读取到的一行文本的字符数组dword fileHandle; //代表打开的文件的引用句柄//打开指定的文件,以字符模式读取fileHandle = openFileRead("Files/Data.txt",0); //文本字符的数据用0,二进制(字节)数据用1//读取文件中的一行文本内容,存入contwhile(fileGetstringSZ(cont,elCount(cont),fileHandle) == 1 ){write("读取到的一行内容为: %s",cont);}write("\n **************文件内容已经读取完毕*********");//关闭文件,以释放资源fileClose(fileHandle); }// 注意:代码中有中文的话会读取失败!!!
写入文本文件
- 写入文本文件的三部曲
1)打开文件 —— openFileWrite ( )
2)写入内容 —— filePutString ( )
3)关闭文件 —— fileClose ( )
char info[100] = "hello"; // 写入数据
dword fh; //句柄//文本字符的数据用0(0代表覆盖写入),二进制(字节)数据用1
//文本数据不想被覆盖用2(2代表追加写入),二进制用3
fh = openFileWrite("Data.txt",0); filePutString(info,elCount(info),fh);
fileClose(fh); //释放资源,关闭资源
on key 'a' {//定义了一个字符数组 data//此处的'/n'代表换行符char data[100] = "VehicleSpeed is 90km/h \n" ; //定义一个名为 fileHandle 的变量,类型是 dword,用于保存打开文件后的文件句柄。dword fileHandle;//定义一个 long 类型的变量 writeResult,用来保存写入文件的结果。long writeResult;//打开文件,用于写入文本数据,如果文件不存在,会自动创建,// 0表示覆盖写入的值, 2表示追加写入 fileHandle = openFileWrite("Files/Result.txt",0); // 向文件中写入字符串内容//向文件中写入字符串内容 writeResult = filePutstring(data,elCount(data),fileHandle );write("写入的结果(filePutString的返回值) : %d", writeResult):// 关闭文件fileClose(fileHandle);}
2_CANoe日志记录“启停”的控制函数
1)“启动”日志记录 —— startLogging
2)“停止”日志记录 —— stopLogging
//“启动”日志记录 —— startLoggingon signal XXX
{i£(条件){startLogging();}else{stopLogging();}
}
示例:“启动”日志记录 —— startLogging
// 当大灯(HeadLight)信号变化时,控制日志记录的启停 // 大灯打开(信号值为1),启动日志记录 // 大灯熄灭(信号值为0),停止日志记录 On signal HeadLight {i£(this == 1 ){startLogging(); // 启动日志记录}else{stopLogging(); //停止日志记录} }
//多个日志记录模块
startLogging(); //主要用于启动全部的日志记录模块
startLogging("Logging名字");
startLogging("Logging名字",前置时间);stopLogging(); //主要用于停止全部的日志记录模块
stopLogging("Logging名字");
stopLogging("Logging名字",后置时间);
3_CAPL编程——数据类型转换的相关函数
1 | ltoa | long转为字符串 |
2 | atol | 字符串转为long |
3 | atodbl | 字符串转为double(双精度浮点数) |
4 | strtol | 字符串转为long |
5 | strtod | 字符串转为double |
on key 'a'
{char rpm[10];long spd;double temp;double rpm2;// 1. ltoa long转为字符串ltoa(2000,rpm,5); //将整数2000转为换字符串 "2000" 存至rpm中,10进制write("引擎转速为: %s 转/分钟", rpm);ltoa(2000,rpm,16); //将整数 2000 转为换字符串 "7D0" 存至rpm中,16进制write("引擎转速为: 0x%s 转/分钟",rpm);// 2.atol 字符串转为longspd = atol("118"); // 将字符串转为整数,存至spd,10进制write("\n车速为: %d km/h",spd);spd = atol("0x6F"); //将字符串转为整数,存至spd,16进制write("车速为: %d km/h",spd);spd = atol("2147483647");write(""2147483647"转为整数后为: %d",spd);spd = atol("小鬼真帅"); //这种字符串就转换不了write(""小鬼真帅"转为整数后为: %d",spd); //结果为 :0spd = atol("24小鬼真6"); //这种只会转换一部分write(""小鬼真帅"转为整数后为: %d",spd); //结果为 :24// 3.atodbl 字符串转为double(双精度浮点数)temp = atodbl("16.5"); // 将字符串转为浮点数write("\n车内温度: %.1f摄氏度",temp);rpm2= atodbl("3.2E3"); // 将字符串转为浮点数(支持科学计数法)write("\n引擎转速: %.1f转/分钟",temp);// 4.strtol 字符串转为longres = strtol("125 117",spd); //将字符串转为整数,存至spdwrite("\n 车速值为: %d km/h。函数的返回值为: %d",spd,res);res = strtol("125 117",res,spd); //将字符串转为整数,存至spdwrite("\n 车速值为: %d km/h。函数的返回值为: %d",spd,res);// 5.strtod 字符串转为doubleres = strtod("3.5 4.2",temp); //将字符串转为浮点数,存至tempwrite("\n 温度值为: %.1f摄氏度。函数的返回值为: %d",temp,res);}
注:只有第1函数是把整数转换成字符串,后面2345函数都是把字符串转成数字;
2 3 是把字符串分别转成整数或者说浮点数
4 5 是把目标的结果作为参数传进去,他的返回值代表转出来的情况
4_CAPL编程——字符串处理的相关函数
- 1)
1 | strlen | 求字符串的长度(字节数) |
2 | mbstrlen | 求字符串的长度(字符数) |
3 | strncat | 字符串的拼接 |
4 | snprintf | 格式化字符串 |
on key 'a'
{char result[50] = "Hello"; // 3. 的用法//4.的用法char buffer[100];word vehSpeed = 80;float temp = 22.5;// 1 strlen 求字符串的长度(字节数)write("用strlen计算字符串[Hello]的长度为:%d",strlen("Hello")); //输出:5 //纯英文write("用strlen计算字符串[OK小鬼]的长度为:%d",strlen("OK小鬼")); //输出:8 //这是因为编码器不同,一个中文会占三个字节,解决方法用mbstrlen// 2 mbstrlen 求字符串的长度(字符数)write("用mbstrlen计算字符串[Hello]的长度为:%d",mbstrlen("Hello")); //输出:5write("用mbstrlen计算字符串[OK小鬼]的长度为:%d",mbstrlen("OK小鬼")); //输出:4 //此时可以输入中文// 3 strncat 字符串的拼接//17指的是整个字符串能拼出来的最大长度,需要减去Hello的五个strncat(result,", everyone!",17); //需要加一个末尾空字符write("\n 使用strncat拼接的结果是: [%s]。字符串的长度: %d",result,strlen(result));//输出:使用strncat拼接的结果是:[hello,ev]。字符串的长度:9// 4 snprintf 格式化字符串snprintf(buffer,elCount(buffer),"当前车速为 %d km/h,车内温度为 %.1f°C",vehSpeed,temp);write(buffer);//输出:当前车速为 80 km/h,车内温度为 22.5°C"
}
- 2)
1 | mbstrncmp | 比较两个字符串 |
2 | mbstrstr mbstrstr_off | 查找字符串的位置 |
3 | mbsubstr_cpy | 截取字符串 |
on key 'a'
{long ret;char data[100] = "speed is 100km/h,100km/h,104km/h";char title[100];char spd1[100];char spd2[100];int index1; //第一个逗号的索引int index2; //第二个逗号的索引// 1 mbstrncmp 比较两个字符串 是否相等ret= mbstrncmp("love","love",4);write("mbstrncmp(\"love\",\"love\",4)的返回值为: %d",ret);// 输出:mbstrncmp("love","love",4)的返回值为: 0// 2 mbstrstr mbstrstr_off 查找字符串出现的位置 ret = mbstrstr(data,",");write("mbstrstr(data,\",\")的返回值为:%d,ret); //从索引0开始找起// 输出:mbstrstr(data,",")的返回值为:16ret = mbstrstr_off(data,ret+1,",");write("mbstrstr_off(data,ret+1,\",\")的返回值为:%d,ret); //输出:mbstrstr_off(data,ret+1,",")的返回值为:24 //未找到会返回-1// 3 mbsubstr_cpy 截取字符串index1= mbstrstr(data,","); //查找 data 中第一个逗号的索引index2= mbstrstr_off(data,index1+1,","); //查找 data 中第二个逗号的索引mbsubstr_cpy(title,data,0,index1); //截取第一个逗号之前的部分write("\n用例标题:%s",title);//输出:用例标题:speed is 100km/h// 截取第一个逗号之后,到第二个逗号之前的部分mbsubstr_cpy(spd1,data,index1+1,index2-index1-1);write("车速信号:%s",spd1);//输出:车速信号:100km/h//截取第二个逗号之后到最后的部分mbsubstr_cpy(spd2,data,index2+1,mbstrlen(date)-index2-1);write("显示车速:%s",spd2);//输出:显示车速:104km/h
}
5_CAPL编程——时间处理的相关函数
1 | timeNow timeNowNS(NS 纳秒) | 获取测量的时长 |
2 | getLocalTime | 获取当前的时间(计算机) |
on key 'a'
{dword res;float res2;long tm[9];// 1 timeNow timeNowNS(NS 纳秒) 获取测量的时长// timeNow 函数返回从测量开始到现在经过的时长(单位是10微妙)res =timeNow();write("timeNow()的返回值为: %d微秒 %.3f秒" ,res,res / 100000.0);// timeNowNS 函数返回从测量开始到现在经过的时长(单位是1纳秒)res2 =timeNowNS();write("timeNowNS()的返回值为: %f纳秒" ,res2);// 2 getLocalTime 获取当前的时间(计算机)// getLocalTime 函数获取本地的当前时间(计算出当前时间的各个字段) // 调用完成后,tm[0]秒, tm[1]分,tm[2]时, tm[3]日, tm[4]月, tm[5]年// tm[6]周几(0~6) tm[7]一年中第XX天 getLocalTime(tm);write("%d年%d月%d日 %d时%d分%d秒 星期: %d,tm[5]+1900, tm[4]+1, tm[3], tm[2], tm[1], tm[0], tm[6]")
}
以上是一些语言基础和常用的内置函数。
希望对你有所帮助,谢谢观看。