QT篇之QT读取CSV数据

接上篇文章QT篇之QT与MxDraw COM控件
因为项目中要用到CSV格式的数据,因此这篇文章讲述一下QT读取CSV文件数据
CSV文件数据项使用“,”来分割的,所以用的时候记得用split(",")就好了,这个没什么好说的,直接上代码
//读取CSV文件数据
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();
        //qDebug()<<"line = "<<line<<'\n';
        if(line.isEmpty()){
            qDebug()<<"CSV FILE HAS READ DONE!"<<'\n';
            break;
        }
        //item = line.split(',',QString::SkipEmptyParts);                           //将读取的每一行用,分割
        item = line.split(',');
        date[count] = item.at(0);                         //存储每个事件的日期
        for(int i=0;i<senNum;i++) {
            senChannelZ[count][i] = item.at(6+i*8);       //存储每个事件后三个通道中Z轴的数据
            senChannelY[count][i] = item.at(5+i*8);       //存储每个事件后三个通道中Y轴的数据
            senChannelX[count][i] = item.at(4+i*8);       //存储每个事件后三个通道中X轴的数据
            senChannelNum[count][i] = item.at(8+i*8);     //存储每个事件触发台站名称
            motiPos[i] = item.at(7+i*8).toInt();          //存储每个传感器波形激发位置
            //qDebug()<<"motiPos["<<i<<"] = "<<motiPos[i]<<'\n';
        }
        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 ;                  //存储每个事件后三个通道中Z轴的数据
    QString **senChannelY ;                  //存储每个事件后三个通道中Y轴的数据
    QString **senChannelX ;                  //存储每个事件后三个通道中X轴的数据

    QString **senChannelNum ;                //存储每个事件触发台站名称

    QString *date;                           //存储每个事件的日期
    int count=0;                             //记录事件的个数,在CSV文件中表现为行数
    双指针其实是动态new了一个二维数组用来存储CSV中的相应数据
  • 8
    点赞
  • 70
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Not found

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值