【问题标题】:Last 52 lines are not written in csv file using qt最后 52 行未使用 qt 写入 csv 文件
【发布时间】:2022-04-11 21:37:35
【问题描述】:

我有一个 csv 文件,其中 3 列和 866300 行。我尝试将此数据写入其他 csv 文件。当我尝试写入时,它在文件中写入了 866248 行,之后剩余的 52 行未写入文件。什么问题我不明白。我尝试使用在控制台上打印该数据来调试此问题,然后在控制台上打印到最后一行。只是将数据写入文件的问题。

#include <QCoreApplication>
#include <QFile>
#include <QStringList>
#include <QDebug>
#include <QTextStream>

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    QFile file("C:/Users/hello/Downloads/hello.csv");

    QFile write("new_data.csv");

    if(!file.open(QIODevice::ReadOnly | QIODevice::Text))
    {
        qDebug()<<file.errorString();
        return 1;
    }

    if(!write.open(QIODevice::WriteOnly |QIODevice::Append))
    {
        qDebug()<<file.errorString();
        return 1;
    }

    QTextStream out(&write);

    QStringList data;
    while (!file.atEnd())
    {
        QString line = file.readLine();
        data = line.split(',');
        if (data[0]=="v1")
        {
            out<<line;
            continue;
        }
        else
        {
            int seq = (data[0].toInt())-1;
            QString str = QString::number(seq)+","+data[1]+","+data[2].trimmed();
            qDebug()<<str;
            out<<str<<"\n";
        }
    }
    return a.exec();
}

请帮忙。

【问题讨论】:

  • 对于 C++ 流,while (!file.eof())is wrong。我想while (!file.atEnd()) 也是如此。
  • 至于您的问题,"v1" 行是第一个元素完全 等于"v1"(区分大小写)或第一列 begin 带有或仅包含 "v1"?这些"v1" 行有多少行?
  • 第一列和第一行仅包含“v1”。然后它开始序列号。

标签: c++ csv qt csv-write-stream csvwriter


【解决方案1】:

请在return a.exec();这一行之前和while循环之后关闭文件。在下面添加这一行。

write.close();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-06-14
    • 1970-01-01
    • 2015-09-16
    • 2014-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-19
    相关资源
    最近更新 更多