- 🍅 我是蚂蚁小兵,专注于车载诊断领域,尤其擅长于对CANoe工具的使用
- 🍅 寻找组织 ,答疑解惑,摸鱼聊天,博客源码,点击加入👉【相亲相爱一家人】
- 🍅 玩转CANoe,博客目录大全,点击跳转👉
📘前言
-
🍅
CAPL
可以读取csv
表格,却不能直接读取xlsx
文件,这是事实。Vector为什么要留这个遗憾呢?
xlsx
格式表格并不是普通的文本文件,底层比较复杂,咱也不懂,总之处理起来并不容易。 CAPL基于C语言,其实C/C++处理 xlsx表格都非常困难,而且第三方库也非常少,即使有依赖文件也比较多。所以我没选择封装动C++态库来实现功能,我选择了相对友好的Python 来实现 -
🍅 核心思想就是通过Python 脚本来实现将xlsx转为csv格式;CAPL中通过sysExeC函数来调用Python脚本;最后,CAPL脚本处理csv格式表格
-
根据上面的分析,你可能需要先熟悉下相关的知识点:
-
🍅 演示软硬件环境
Windows11 x64
;CANoe 11 SP2 x64
,Python 3.8 x64
13855848697
📙 全部代码
1️⃣ 首先我的D盘目录下 有一个xlsx 格式的测试文件,有一个python 打包之后的toCSV.exe程序
- 这个toCSV.exe程序放在下方公众号的阿里网盘,有需自取 ,有经验的也可以直接使用Python源码,运行速率会快很多。
2️⃣ CAPL 源码
- 下面代码是simulation 类型的CAPL,突出这点,是延时处理,只能用定时器来实现
- 分成三部分:
on key 'a'
,调用toCSV.exe
,根据xlsx表格生成csv表格(复制,另存为,不破坏源xlsx文件);on timer sleep
调用ReadOutDataFromCsv()
函数读取csv文件;ReadOutDataFromCsv
函数是执行代码 - 这里要强调下:capl 脚本并不会等待python脚本执行完毕,所以如果接下来要执行读取csv相关代码,要有一定的延时处理(大概3s左右,如果是调用Python脚本源码的会小很多,具体时间可以根据自己代码去调试。)
variables
{
msTimer sleep;
char InputFile[256] = "D:\\ToCSV\\TEST.xlsx";
char OutFile[256] = "D:\\ToCSV\\TEST.csv";
}
on timer sleep
{
ReadOutDataFromCsv(OutFile);
}
on key 'a'
{
char parameter[256];
char scriptPath[256]="D:\\ToCSV\\toCSV.exe";
snprintf(parameter,elCount(parameter),"%s csv",InputFile);
sysExeC(scriptPath,parameter);
//capl 脚本并不会等待python脚本执行完毕,所以如果接下来要执行读取csv相关代码,要有一定的延时处理
//test node 可以直接用testwaitfortimeout()函数
setTimer(sleep,3000);
}
int ReadOutDataFromCsv(char FilePath[])
{
char buffer_ascii[100];
long retSize;
int i,j,glbHandle;
glbHandle = OpenFileRead (FilePath,1);
if (glbHandle!=0 )
{ for(j=0;fileGetStringSZ(buffer_ascii,elcount(buffer_ascii),glbHandle)!=0 ;j++ )
{
write ("lineNum:%d string*********%s.",j,buffer_ascii);
}
fileClose (glbHandle);
}
else
{
write("Read file :%s failed.",FilePath);
return 0; //failed
}
return 1; //passed
}
3️⃣ 运行完毕后, 文件目录下会生成一个csv文件 ,CAPL脚本输出csv文件的内容
🌎总结
- 🚩要有最朴素的生活,最遥远的梦想,即使明天天寒地冻,路遥马亡!
- 🚩如果这篇博客对你有帮助,请 “点赞” “评论”“收藏”一键三连 哦!码字不易,大家的支持就是我坚持下去的动力。