QT读写csv文件(文本文件)

这篇博客展示了如何使用QT进行CSV文件的读写操作。在`on_pushButton_clicked`函数中,实现了写入数据到CSV文件,首先检查数据是否已读取,然后打开并清空文件,设置编码,生成表头并写入数据。在`on_pushButton_2_clicked`函数中,实现了读取CSV文件数据,检查文件位置,读取文件,设置编码,跳过表头并逐行读取数据,将数据存储到`dataMap`中。
//写数据
void MainWindow::on_pushButton_clicked()
{
    if(dataMap.size()<=0){
        QMessageBox::information(this,"","请先进行读数据操作!",NULL);
        return;
    }
    QFile file("C:/20171114.csv");
    QTextStream textStream;
    if(!file.open(QFile::WriteOnly | QFile::Truncate | QFile::Text)){
        QMessageBox::information(this,"","无生成盘符,应生成在C:/20171114.csv",NULL);
    }else{
        textStream.setDevice(&file);
        textStream.setCodec("GB2312");
        QMap<QString,int>dataNumMap;

        for(auto it = dataMap.begin();it != dataMap.end();++it){
            dataNumMap.insert(it.key(),it.value().size());
        }
        int maxNum = dataNumMap[dataNumMap.firstKey()];
        for(auto it = dataMap.begin();it != dataMap.end();++it){
            int temp = dataNumMap[it.key()];
            if(maxNum <= temp)
                maxNum = temp;
        }
        QString headerStr = "SevRNP,Number";
        for(int i=1;i<=maxNum;i++){
            headerStr = headerStr + ",TagRNP" + QString::number(i);
        }
        textStream << headerStr +"\n";
        //写数据
        QString dataStr;
        for(auto it = dataMap.begin();it != dataMap.end();++it){
            dataStr = it.key()+","+QString::number(it.value().size());
            for(int i=0;i<it.value().size();++i){
                QStringList value = it.value();
                dataStr += ","+value.at(i);
            }
            textStream << dataStr +"\n";
            dataStr.clear();
        }
    }
    file.close();
    this->close();
    QMessageBox::information(this,"","文件生成在C:/20171114.csv",NULL);
}

//读取数据

void MainWindow::on_pushButton_2_clicked()
{
    QFile file("C:/20171113.csv");
    if(!file.open(QIODevice::ReadOnly | QIODevice::Text)){
        QMessageBox::information(this,"","文件放错位置,应放置C:/20171113.csv",NULL);
    }else{
        QTextStream textStream(&file);
        textStream.setCodec("GB2312");
        textStream.readLine();
        //读数据
        QStringList firstData = textStream.readLine().split(",");
        SevRNP = firstData.at(0);
        TagRNPList.append(firstData.at(1));
        while(!textStream.atEnd()){
            QStringList tempData = textStream.readLine().split(",");
            if(tempData.at(0) == SevRNP){
                TagRNPList.append(tempData.at(1));
                continue;
            }
            dataMap.insert(SevRNP,TagRNPList);
            SevRNP = tempData.at(0);
            TagRNPList.clear();
            TagRNPList.append(tempData.at(1));
        }
        QMessageBox::information(this,"","数据读取完成,请写数据生成文件!",NULL);
    }
    file.close();
//    QString len ;
//    for(auto it = dataMap.begin();it != dataMap.end();++it){
//        len += QString::number(it.value().size())+",";
//    }
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值