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

   //读取文件中的一行文本内容,存入cont
   while(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

复制代码
//"启动"日志记录 ------ startLogging

on 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	    字符串转为long
  spd = 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);  //结果为 :0

  spd = 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	          字符串转为long
  res = strtol("125   117",spd);  //将字符串转为整数,存至spd
  write("\n 车速值为: %d km/h。函数的返回值为: %d",spd,res);

  res = strtol("125   117",res,spd);  //将字符串转为整数,存至spd
  write("\n 车速值为: %d km/h。函数的返回值为: %d",spd,res);



  // 5.strtod	          字符串转为double
  res = strtod("3.5   4.2",temp);  //将字符串转为浮点数,存至temp
  write("\n 温度值为: %.1f摄氏度。函数的返回值为: %d",temp,res);

}

注:只有第1函数是把整数转换成字符串,后面2345函数都是把字符串转成数字;

2 3 是把字符串分别转成整数或者说浮点数

4 5 是把目标的结果作为参数传进去,他的返回值代表转出来的情况




4_CAPL编程------字符串处理的相关函数

|---|----------|--------------|
| 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"));  
  //输出:5

  write("用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"
}

|---|-----------------------|----------|
| 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,",")的返回值为:16
  ret = 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]")
}

以上是一些语言基础和常用的内置函数。



希望对你有所帮助,谢谢观看。

相关推荐
阑梦清川2 分钟前
AI超级智能体项目教程(二)---后端项目初始化(设计knif4j接口文档的使用)
java·前端·数据库
hotlinhao2 分钟前
ThinkPHP6模型中多组条件逻辑或Or查询的使用
linux·服务器·数据库
jack xu19 分钟前
高频面试题:如何保证数据库和es数据一致性
java·大数据·数据库·mysql·elasticsearch
Pocker_Spades_A13 分钟前
金仓数据库征文-政务领域国产化数据库更替:金仓 KingbaseES 应用实践
数据库·政务·金仓数据库 2025 征文·数据库平替用金仓
nongcunqq16 分钟前
爬虫练习 js 逆向
笔记·爬虫
XY.散人29 分钟前
初识Redis · 哨兵机制
数据库·redis·缓存
程序猿--豪32 分钟前
webpack详细打包配置,包含性能优化、资源处理...
前端·webpack·性能优化
汐汐咯37 分钟前
终端运行java出现???
笔记
__淡墨青衫__1 小时前
Django之旅:第七节--模版继承
数据库·django·sqlite
秃头佛爷1 小时前
常用SQL整理
数据库·sql