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.pswp.cn/bicheng/78366.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/78366.shtml
英文地址,請注明出處:http://en.pswp.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 << "??"…