qt 5.15.2读取csv文件功能

qt 5.15.2读取csv文件功能

工程文件.pro 内容:

cpp 复制代码
QT = core

#添加网络模块
QT += network

CONFIG += c++17 cmdline

# You can make your code fail to compile if it uses deprecated APIs.
# In order to do so, uncomment the following line.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0

SOURCES += \
        main.cpp

# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target

main.cpp

cpp 复制代码
#include <QCoreApplication>

#include <iostream>
#include <QFile>
#include <QTextStream>
//
#include <QNetworkAccessManager>
#include <QNetworkReply>
#include <QUrl>
#include <QDir>
//
QNetworkAccessManager manager;
//
int printf(QString line)
{
    std::cout<<line.toStdString()<<std::endl;
}
int printf(int line)
{
    std::cout<<line<<std::endl;
}

//异步下载
bool downloadFile(QString file_url,QString toDirPath)
{
    QDir dirPath(toDirPath);
    if(!dirPath.exists())
    {
        if(!dirPath.mkdir(dirPath.absolutePath()))
        {
            printf("create dir error");
            return false;
        }
    }

    printf("old="+file_url);
    QUrl url(file_url); //"http://example.com/file.txt");
    QNetworkRequest request(url);

    // 发送GET请求获取文件数据
    QNetworkReply *reply = manager.get(request);

    // 处理请求完成信号
    QObject::connect(reply, &QNetworkReply::finished, [&]() {
        if (reply->error() == QNetworkReply::NoError) {
            // 获取响应数据
            QByteArray data = reply->readAll();

            QString toFilePath=toDirPath+"\\"+url.fileName();
            printf(toFilePath);
            // 保存到本地文件
            QFile file(toFilePath);
            if (file.open(QIODevice::WriteOnly)) {
                file.write(data);
                file.close();
                printf("文件下载成功:"+toFilePath);
            } else {
                printf("无法保存文件:"+toFilePath);
            }
        } else {
            printf("请求错误:");printf(reply->errorString());
        }
        // 清理资源
        reply->deleteLater();
        qApp->quit();
    });
    return true;
}

//同步下载
bool syncDownloadFile(QString file_url,QString toDirPath)
{
    QUrl url(file_url);
    //输出C:\data\obj\test\Tile_+005_+006_OBJ.zip
    QString downloadFilePath=toDirPath+"\\"+url.fileName();
    printf(downloadFilePath);
    //QNetworkAccessManager manager;
    QNetworkReply *pReply = manager.get(QNetworkRequest(url));
    QEventLoop loop;
    manager.connect(pReply, SIGNAL(manager.finished()), &loop, SLOT(manager.quit()));
    loop.exec();

    if(pReply->error() != QNetworkReply::NoError)
    {
        return false;
    }
    else
    {
        int code = pReply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt();
        if (code != 200)
        {
            return false;
        }
        else
        {
            //下载成功,保存文件
            QFile localFile(downloadFilePath);
            if (localFile.open(QIODevice::WriteOnly))
            {
                localFile.write(pReply->readAll());
                localFile.close();
            }
        }
    }
    pReply->deleteLater();
    return true;
}

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    std::cout<<"Hello World! hsg77"<<std::endl;

    //打开csv文件
    QFile file("E:\\QtProject\\objDownloadTest\\GridIdx_OBJ.csv");
    std::cout<<file.fileName().toStdString()<<std::endl;
    if(file.exists())
    {
        if(file.open(QIODevice::ReadOnly))
        {
            QTextStream in(&file);

            //std::cout<<"file state="<<in.atEnd()<<std::endl;

            while(!in.atEnd())
            {
                QString line=in.readLine();
                QStringList fds=line.split("	");

                //std::cout<<line.toStdString()<<std::endl;
                //printf(fds.length());

                //处理每一行的数据
                QString fileUrl=fds.at(13);
                printf("readydown="+fileUrl);

                /*
                int i=0;
                for(const QString& fd : fds)
                {
                    printf(i);
                    printf("="+fd);
                    i+=1;
                }*/

                if(fileUrl!="FILE_URL")
                {
                    //下载文件  fileUrl
                    QString toDirPath="C:\\data\\obj\\test";
                    syncDownloadFile(fileUrl,toDirPath);
                }
                //break;

            }
        }
    }
    //
    file.close();
    std::cout<<"csv file closed"<<std::endl;

    return a.exec();
}

本blog地址:
http://blog.csdn.net/hsg77

相关推荐
我很好我还能学1 小时前
【面试篇 9】c++生成可执行文件的四个步骤、悬挂指针、define和const区别、c++定义和声明、将引用作为返回值的好处、类的四个缺省函数
开发语言·c++
蓝婷儿1 小时前
6个月Python学习计划 Day 16 - 面向对象编程(OOP)基础
开发语言·python·学习
渣渣盟2 小时前
基于Scala实现Flink的三种基本时间窗口操作
开发语言·flink·scala
糯米导航2 小时前
Java毕业设计:办公自动化系统的设计与实现
java·开发语言·课程设计
糯米导航2 小时前
Java毕业设计:WML信息查询与后端信息发布系统开发
java·开发语言·课程设计
MessiGo3 小时前
Javascript 编程基础(5)面向对象 | 5.1、构造函数实例化对象
开发语言·javascript·原型模式
大霞上仙3 小时前
nonlocal 与global关键字
开发语言·python
galaxy_strive3 小时前
绘制饼图详细过程
开发语言·c++·qt
黑客老李3 小时前
JavaSec | SpringAOP 链学习分析
java·运维·服务器·开发语言·学习·apache·memcached
开开心心就好4 小时前
高效Excel合并拆分软件
开发语言·javascript·c#·ocr·排序算法·excel·最小二乘法