c++ - 在Qt5应用程序上读取CSV文件时出现无限循环

标签 c++ qt csv if-statement fstream

我目前正在使用可处理CSV文件的Qt应用程序。我实现了一种方法,其唯一目的是在控制台上显示内容(目前)。

以下是相关代码:

AppMainWindow,方法loadCsv

void AppMainWindow::loadCsv() {
    cout << "Sélection du fichier" << endl;

    QString fileName = QFileDialog::getOpenFileName(NULL, "Ouvrir un fichier", QString(), "Tableau CSV (*.csv)");
    if (fileName != NULL && !fileName.isEmpty()) {
        cout << "Ouverture du fichier \"" << fileName.toStdString() << "\"" << endl;
        string name = fileName.toStdString();
        vector<vector<string>> data = CsvReader::readCsv(&name);
    } else
        cout << "Pas de fichier sélectionné" << endl;
}

CsvReader.h
#include <fstream>
#include <iostream>
#include <sstream>
#include <string>
#include <vector>

using namespace std;

namespace CsvReader {
    vector< vector<string> > readCsv(string *fileStream);
}

CsvReader.cpp
#include "src/com/alten/utility/CsvReader.h"

vector<vector<string>> CsvReader::readCsv(string *fileName) {
    vector < vector<string> > data;
    string line;

    ifstream fileStream(*fileName);
    while (getline(fileStream, line)) {
        vector < string > row;
        string element;

        cout << "Ligne :" << line << endl;

        stringstream lineStream(line);
        while (getline(lineStream, element, ',')) {
            cout << "Item :" << element << endl;
            row.push_back(element);
        }

        data.push_back(row);
    }

    fileStream.close();
}

当我加载任何CSV文件时,loadCsv会正常执行,直到if语句结束时,Qt应用程序突然冻结。

当我删除我的if语句时没有那个问题:
void AppMainWindow::loadCsv() {
    cout << "Sélection du fichier" << endl;

    QString fileName = QFileDialog::getOpenFileName(NULL, "Ouvrir un fichier", QString(), "Tableau CSV (*.csv)");
    cout << "Ouverture du fichier \"" << fileName.toStdString() << "\"" << endl;
    string name = fileName.toStdString();
    vector<vector<string>> data = CsvReader::readCsv(&name);
}

我不精通Cpp,有人可以向我解释错误的出处吗?

注意:我用cmake编译代码。

最佳答案

你应该:

  • 打开文件->检查是否失败
  • 逐行阅读所有
  • 跳过空的部分,将 vector ,列表,数组或
    随便...

  • -
    bool parseCsvFileQt(const QString& filename, QVector<QString>& row)
    {
        QFile file(filename);
        if(!file.open(QIODevice::ReadOnly))
        {
            qDebug() << file.errorString();
            return false;
        }
            QString line = file.readAll();
            line = line.remove("\r");
            QStringList arrayOfLines = line.split("\n", QString::SkipEmptyParts);
    
            for(int i = 1; i < arrayOfLines.size(); i++)
            {
                row.push_back(arrayOfLines[i]);
            }
        return true;
    }
    

    关于c++ - 在Qt5应用程序上读取CSV文件时出现无限循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61636958/

    相关文章:

    c++ - Xcode将简单的C++ 20代码段标记为错误,但使用最新的LLVM 10.0.0 Clang编译器正确编译

    c++ - 推力 vector 切片/ View

    c++ - Qt 小部件/布局的 WinForm "Dock Fill"是否等效?

    mysql - 将数据从csv导入到mysql的脚本

    c++ - 检查标志是否设置在整数变量中

    c++ - 图形项的 QGraphicsScene 内的可拖动像素图

    c++ - Qt:QSplitter,重做大小

    sql - PostgreSQL 中第一次出现空格时分割字符串?

    node.js - 如何使用nodejs将csv数据插入mongodb

    c++ - qmake:处理 gcc 和 msvc 的选项