В настоящее время я работаю над приложением Qt, которое работает с файлами CSV. Я реализовал метод, единственной целью которого является отображение содержимого на консоли (на данный момент).
Вот соответствующий код:
Class 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 -флюент, может ли кто-нибудь объяснить мне, откуда взялась ошибка?
NB: Я компилирую свой код с помощью cmake.