因为项目中要用到CSV格式的数据,因此这篇文章讲述一下QT读取CSV文件数据
CSV文件数据项使用“,”来分割的,所以用的时候记得用split(",")就好了,这个没什么好说的,直接上代码
void ReadCSVData::readCSVFile(QString fileName)
{
QDir dir = QDir::current();
QFile file(dir.filePath(fileName));
qDebug()<<"fileName="<<fileName<<'\n';
QList<QStringList> data;
QStringList item;
QString line ;
if(!file.open(QIODevice::ReadOnly|QIODevice::Text)){
qDebug()<<"open file failed!"<<'\n';
return ;
}
QTextStream stream(&file);
while (!stream.atEnd())
{
line = stream.readLine();
line = line.trimmed();
if(line.isEmpty()){
qDebug()<<"CSV FILE HAS READ DONE!"<<'\n';
break;
}
item = line.split(',');
date[count] = item.at(0);
for(int i=0;i<senNum;i++) {
senChannelZ[count][i] = item.at(6+i*8);
senChannelY[count][i] = item.at(5+i*8);
senChannelX[count][i] = item.at(4+i*8);
senChannelNum[count][i] = item.at(8+i*8);
motiPos[i] = item.at(7+i*8).toInt();
}
count++;
}
qDebug()<<"count ="<<count<<'\n';
file.close();
qDebug()<<"read csv file successfully!"<<'\n';
}
说明:上面代码中的for循环是具体定位到CSV文件中的某一列数据,直接用数组操作是比较方便的
比如这一行数据:
2020-06-1804:19:30,0,0,0,-514,-282,-135,11400,3,0,0,0,-625,-604,603,11450,4,0,0,0,393,-304,94,11700,2,0,0,0,236,14,382,12950,1,
数据项是比较多的,可以直接item.at(index)索引获取你需要的某行某列的数据。
另外,代码中未说明的几个变量类型为:
QString **senChannelZ ;
QString **senChannelY ;
QString **senChannelX ;
QString **senChannelNum ;
QString *date;
int count=0;
双指针其实是动态new了一个二维数组用来存储CSV中的相应数据