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编程——数据类型转换的相关函数

1ltoalong转为字符串
2atol字符串转为long
3atodbl字符串转为double(双精度浮点数)
4strtol字符串转为long
5strtod字符串转为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)
1strlen求字符串的长度(字节数)
2mbstrlen求字符串的长度(字符数)
3strncat字符串的拼接
4snprintf格式化字符串
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)
1mbstrncmp比较两个字符串
2

mbstrstr

mbstrstr_off

查找字符串的位置
3mbsubstr_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 纳秒)

获取测量的时长
2getLocalTime获取当前的时间(计算机)
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]")
}

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



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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/78366.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2025年江西建筑安全员A证适合报考人群

江西建筑安全员A证适合报考人群 江西省建筑安全员A证(建筑施工企业主要负责人安全生产考核合格证书)主要面向建筑行业管理人员,适合以下人员报考: 1. 企业主要负责人 法人代表、总经理、分管安全副总:依法需持A证&a…

Docker安装(Ubuntu22版)

前言 你是否还在为Linux上配置Docker而感到烦恼? 你是否还在为docker search,docker pull连接不上,而感到沮丧? 本文将解决以上你的所有烦恼!快速安装好docker! Docker安装 首先,我们得先卸载…

Ubuntu18.04配置C++环境和Qt环境

Ubuntu18.04配置C环境和Qt环境 1、前言3.2 安装其他库3.3 查看有没有安装成功3.4测试C环境 4、配置Qt环境4.1 安装相关的库4.2 测试 5、总结 1、前言 记录一下Ubuntu18.04配置C环境和Qt环境的过程,方便自己日后回顾,也可以给有需要的人提供帮助。 # 2…

ACWing——算法基础课

置顶思考: 算法的本质是什么样的思想? 这种思想可以解决哪类问题? 有没有其他的解决思路? 关注数值范围,思考可不可以针对性解决问题? 目录 https://leetcode.cn/circle/discuss/RvFUtj/ 滑动窗口与双指针…

私钥连接服务器(已经有服务器私钥

前言:假设我们已经有了服务器的私钥,我们怎么配置呢? 下面我会从vsc的配置角度来写 ✅ 步骤一:准备工作 安装 VS Code(如果还没装) 👉 https://code.visualstudio.com/ 安装插件:Re…

Redis LFU 策略参数配置指南

一、基础配置步骤‌ 设置内存上限‌ 在 redis.conf 配置文件中添加以下指令,限制 Redis 最大内存使用量(例如设置为 4GB): maxmemory 4gb选择 LFU 淘汰策略‌ 根据键的作用域选择策略: # 所有键参与淘汰 maxmemory-…

嵌入式 C 语言面试核心知识点全面解析:基础语法、运算符与实战技巧

在嵌入式面试中,C 语言基础是重中之重。本文针对经典面试题进行详细解析,帮助新手系统掌握知识点,提升面试应对能力。 一、数据结构逻辑分类 题目 在数据结构中,从逻辑上可以把数据结构分为( )。 A、动态…

11.AOP开发

十一、AOP开发 1、Spring Boot实现 AOP 11.1.1、SpringBootAop简介 Spring Boot的AOP编程和Spring框架中AOP编程的唯一区别是&#xff1a;引入依赖的方式不同,其他内容完全一样 Spring Boot中AOP编程需要引入aop启动器&#xff1a; <!--aop启动器--> <dependency…

【网络入侵检测】基于源码分析Suricata的PCAP模式

【作者主页】只道当时是寻常 【专栏介绍】Suricata入侵检测。专注网络、主机安全,欢迎关注与评论。 1. 概要 👋 本文聚焦于 Suricata 7.0.10 版本源码,深入剖析其 PCAP 模式的实现原理。通过系统性拆解初始化阶段的配置流程、PCAP 数据包接收线程的创建与运行机制,以及数据…

.NET 10 中的新增功能

.NET 运行时 .NET 10 运行时引入了新功能和性能改进。 关键更新包括&#xff1a; 数组接口方法反虚拟化&#xff1a;JIT 现在可以取消虚拟化和内联数组接口方法&#xff0c;从而提高数组枚举的性能。数组枚举去抽象化&#xff1a;改进功能以通过枚举器减少数组迭代的抽象开销…

盲注命令执行(Blind Command Execution)

一、核心原理 1. 无回显命令执行的本质 盲命令执行&#xff08;Blind Command Execution&#xff09;是一种攻击形式&#xff0c;攻击者通过注入系统命令到Web应用或后端系统中&#xff0c;但无法直接获取命令执行结果。盲命令执行的本质在于攻击者无法直接看到执行结果&#x…

Linux多线程技术

什么是线程 在一个程序里的多执行路线就是线程。线程是进程中的最小执行单元&#xff0c;可理解为 “进程内的一条执行流水线”。 进程和线程的区别 进程是资源分配的基本单位&#xff0c;线程是CPU调度的基本单位。 fork创建出一个新的进程&#xff0c;会创建出一个新的拷贝&…

计算机组成原理实验(1) 算术逻辑运算单元实验

实验一 算术逻辑运算单元实验 一、实验目的 1、掌握简单运算器的数据传输方式 2、掌握74LS181的功能和应用 二、实验内容 1、不带进位位逻辑或运算实验 2、不带进位位加法运算实验 3、实验指导书2.15实验思考 三、实验步骤和结果 实验内容一&#xff1a;不带进位…

Android将启动画面实现迁移到 Android 12 及更高版本

如果在 Android 11 或更低版本中实现自定义启动画面&#xff0c;请迁移应用迁移到 SplashScreen API 以获取帮助 确保其在 Android 12 及更高版本中正确显示。 从 Android 12 开始&#xff0c;在所有应用的冷启动和温启动期间&#xff0c;系统都会应用 Android 系统的默认启动…

692. 前K个高频单词(map的练习)

目录 1、题目分析 2.解题思路 3.代码实现 4.总结 1、题目分析 2.解题思路 首先它给出我们一个string&#xff0c;让我们提取出它们中出现次数最多的。利用map将word一个一个存入其中&#xff0c;没有就插入&#xff0c;有了就1&#xff0c;这样我们就得到了key_value&#…

如何创建极狐GitLab 议题?

极狐GitLab 是 GitLab 在中国的发行版&#xff0c;关于中文参考文档和资料有&#xff1a; 极狐GitLab 中文文档极狐GitLab 中文论坛极狐GitLab 官网 创建议题 (BASIC ALL) 创建议题时&#xff0c;系统会提示您输入议题的字段。 如果您知道要分配给议题的值&#xff0c;则可…

day32 学习笔记

文章目录 前言一、霍夫变换二、标准霍夫变换三、统计概率霍夫变换四、霍夫圆变换 前言 通过今天的学习&#xff0c;我掌握了霍夫变换的基本原本原理及其在OpenCV中的应用方法 一、霍夫变换 霍夫变换是图像处理中的常用技术&#xff0c;主要用于检测图像中的直线&#xff0c;圆…

图解YOLO(You Only Look Once)目标检测(v1-v5)

1. YOLO系列整体介绍 YOLO属于深度学习经典检测方法中的单阶段&#xff08;one - stage&#xff09;类型&#xff0c;与两阶段&#xff08;two - stage&#xff0c;如Faster - rcnn、Mask - Rcnn系列&#xff09;方法相对。 不同模型性能 单阶段方法的最核心优势是速度非常快…

C# 类型、存储和变量(静态类型和dynamic关键字、可空类型)

本章内容 C#程序是一组类型声明 类型是一种模板 实例化类型 数据成员和函数成员 预定义类型 用户定义类型 栈和堆 值类型和引用类型 变量 静态类型和dynamic关键字 可空类型 静态类型和dynamic关键字 你可能巳经注意到了&#xff0c;每一个变量都包括变量类型。这样编译器就可…

信奥赛之c++基础(初识循环嵌套与ASCII密码本)

🎠 游乐园编程奇遇记——循环嵌套与ASCII密码本 🎡 第一章:摩天轮与旋转木马——循环嵌套 🎪 游乐场里的双重循环 for(int 排数=1; 排数<=3; 排数++){// 外层循环像摩天轮for(int 座位=1; 座位<=5; 座位++){// 内层循环像旋转木马cout << "🎪"…