我目前正在使用可处理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编译代码。
最佳答案
你应该:
随便...
-
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/