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]")
}
以上是一些語言基礎和常用的內置函數。
希望對你有所幫助,謝謝觀看。