【【【目录】】】
- 如何从本地某个csv中读取数据?
- 如何批量读取本地某个文件夹中的符合条件的所有csv?
- 如何批量读取本地多个文件夹中的符合条件的所有csv?
- 如何将矩阵保存到本地?
- 如何将数组保存成本地图片?
- 整型除法四舍五入
- MALLOC的用法与理解
- 用MALLOC申请一个100*100的矩阵空间
- 用MALLOC申请一个5个100*100的矩阵空间
定义一个数组:int16_t array[32]={0};
【1、如何从本地的某个csv中读取数据?】
char* pCharPathCsv = R"(E:\文件夹1\abc.csv)";
int16_t* pMat=NULL;
pMat = (int16_t*)MALLOC(100*100*sizeof(int16_t));
if(NULL == pMat)
{printf("pMat MALLOC failed\n");}
int16_t nWidth=100,nHeigth=100,nNumber=1;
if (0 != LoadCsvAll(pCharPathCsv,&pMat,nWidth,nHeight,nNumber))//这里的nNumber表示读取几帧
{printf("LoadCsvALL() failed\n");}
//调试时,在imageWatch中使用@mem(pMat,int16,1,100,100,2*100)可以看到从csv中采集到的图像。
【2、如何批量读取本地某个文件夹中的符合条件的所有csv?】
//===搜索此路径下,符合条件的所有csv===//
char* pCharPath = R"(E:\文件夹1)";
string strPath = pCharPath;
std::vector<string> csvList,pathCsvList;
FindSpeciFilesInFolder(strPath,"*20220811*.csv",csvList,1);
PathCsvList = csvList;
for(i=0;i<csvList.size();i++)
{
PathCsvList[i] = strPath + csvList[i];
printf("pathCsv:%s\n",PathCsvList[i].c_str());
}
//===申请空间,读出到mat中===//
int16_t* pMat=NULL;
pMat = (int16_t*)MALLOC(100*100*sizeof(int16_t));
if(NULL == pMat)
{printf("pMat MALLOC failed\n");}
int16_t nWidth=100,nHeigth=100,nNumber=1;
for(int16_t i=0;i<pathCsvList.size();i++)
{
if (0 != LoadCsvAll(pCharPathCsv,&pMat,nWidth,nHeight,nNumber))
{printf("LoadCsvALL() failed\n");}
//===处理nMat===//
......
}
【3、如何批量读取本地多个文件夹中的csv?】
//===搜索所有符合条件的路径===//
char* pCharPath = R"(E:\文件夹1)";
string strPath = pCharPath;
std::vector<string> pathList;//用于存储文件夹列表
GetFiles(strPath,"文件夹1",pathList);//查找符合条件的所有路径,不是查找文件的!//查找文件夹名中包含"文件夹1"的所有路径。
//===搜索所有路径下,符合条件的所有csv===//
std::vector<string> tempCsvList,tempPathCsvList,pathCsvList;
for(int16_t i=0;i<csvList.size();i++)
{
FindSpeciFilesInFolder(pathList[i],"*20220811*.csv",tempCsvList,1);
tempPathCsvList = tempCsvList;
for(j=0;j<tempCsvList.size();j++)
{
tempPathCsvList[j] = pathList[i] + tempCsvList[j];
printf("pathCsv:%s\n",pathCsv.c_str());
}
pathCsvList.insert(pathCsvList.end(),tempPathCsvList.begin(),tempPathCsvList.end());
}
//===申请空间,读出到mat中===//
int16_t pMat=NULL;
pMat = (int16_t*)MALLOC(100*100*sizeof(int16_t));
if(NULL == pMat)
{printf("pMat MALLOC failed\n");}
int16_t nWidth=100,nHeigth=100,nNumber=1;
for(int16_t i=0;i<pathCsvList.size();i++)
{
if (0 != LoadCsvAll(pCharPathCsv,&pMat,nWidth,nHeight,nNumber))
{printf("LoadCsvALL() failed\n");}
//===处理nMat===//
......
}
【4、如何将矩阵保存到本地?】
#include<fstream.h>
void SaveCsvU8(const string &pathCsv,const uint8_t* pMat,uint16_t row,uint16_t col)
{
ofstream tempFileSysCsv(pathCsv); //定义的tempFileSysCsv表示临时文件系统中的csv文件,指向pathCsv路径下的csv文件
for(int i=0;i<row;i++) //数据先写到tempFileSysCsv中,最后close时,统一写入本地磁盘空间pathCsv路径下的csv文件
{
for(int j=0;j<col-1;j++)
{
tempFileSysCsv<<to_string(pMat[i*col+j])<<",";
}
tempFileSysCsv<<to_string(pMat[(i+1)*col-1])<<","<<endl;
}
tempFileSysCsv.close();//关闭的时候,文件系统会将数据写入到磁盘的csv文件里
}
void SaveCsvU16(const string &pathCsv,const uint16_t* pMat,uint16_t row,uint16_t col)
{
ofstream tempFileSysCsv(pathCsv);
for(int i=0;i<row;i++)
{
for(int j=0;j<col-1;j++)
{
tempFileSysCsv<<to_string(pMat[i*col+j])<<",";
}
tempFileSysCsv<<to_string(pMat[(i+1)*col-1])<<","<<endl;
}
tempFileSysCsv.close();
}
【5、如何将数组保存成本地图片?】
saveToBMP((int_16 8)arrayAddr,"D:/文件夹1/myImage",0,0,cols,rows,DATA_SHORT);
保存后,图片名为myImage.bmp
注意:路径用的是反斜杠'/'
【6、整型除法四舍五入】
int a = 9;
int b = 2;
int ans1 = a / b; //没有四舍五入,输出为4
int ans2 = (a + b/2) / b; //有四舍五入,输出为5
【7、MALLOC的用法与理解】
int *p = (int*)MALLOC(100*100*sizeof(int));
MALLOC说:"我要申请100个地址连续的小空间,每个空间大小正好能够存放一个int数据,将来存放int数据,
第一个小空间的地址我要交给指向int空间的 指针变量p"
int **pp=(int**)MALLOC(100*100sizeof(int*));
MALLOC说:"我要申请100个地址连续的小空间,每个空间大小正好能够存放某个int数据的地址,
第一个小空间的地址我要交给更高一级的 指针变量pp"
【8、用MALLOC申请一个100*100的矩阵空间】注:从高级指针向低级指针申请
//定义一个二级指针变量,MALLOC申请100个连续行组长,把第一个组长的地址给 “矩阵总领”
int **mat = (int**)MALLOC(100*sizeof(int*));
for(i=0;i<100;i++)//给每个行组长分配1000个“基层小兵”,真正用来存储数据的就是“基层小兵”
{
mat[i]=(int*)MALLOC(100*sizeof(int));
}
【9、用MALLOC申请一个5个100*100的矩阵空间】注:从高级指针向低级指针申请
int ***mats = (int***)MALLOC(5*sizeof(int**));//申请了5个矩阵的“头”
for (n=0;n<5;i++)
{
mats[n]=(int**)MALLOC(100*sizeof(int*));//申请了每个矩阵的行“头”
for(i=0;i<100;i++)
{
mats[n][i]=(int*)MALLOC(100*sizeof(int));//为每个“行头”申请了100个小空间int
}
}