Bonjour,
Je suis actuellement en train de programmer une application en c++ sur le logiciel qtCreator permettant d'importer un fichier csv (séparateur: point-virgule). Ce fichier csv en question possède qu'une seule colonne mais plusieurs milliers de lignes, exemple sur 4 lignes de mon fichier csv (ouvert avec le bloc-notes) :
Chaque valeur est séparée par une "," et les valeurs qui m'intéresse dont la première et la seconde, le reste il ne faut pas que je le récupère.0.039857388,-0.003738137,0.06250116,0.25656 67,-0.001272172,-0.01373339,1.02111,-21.17171,7.4605,-45.51118,992.6195
0.059785843,0.1196105,-0.054944,0.07280188,-0.00516515,-0.01240508,1.026502,-21.54725,7.464026,-45.50937,992.6195
0.079714298,-0.06540834,0.003764346,-0.04946759,0.001198196,-0.0152172,1.024932,-21.54725,7.464026,-45.50937,992.6161
0.099642754,0.1195519,0.062362 03,-0.04940103,-0.001855387,-0.008762462,1.013986,-21.1812,7.841142,-45.96167,992.6161
J'aimerais stocker la première valeur de la ligne dans une variable QVector <QString> intitulé "ValeurTemps" et la seconde dans une variable QVector <QString> intitulé "ValeurGyroX".
Voici donc le code que j'ai réalisé :
Celui-ci ne me pose pas de problème lors de la compilation ni lorsque je lance mon programme. Mais sur ma fenêtre graphique j'ai donc un bouton charge qui me permet de récupérer le fichier csv en question (grâce au code ci-dessus) et lorsque j'essaie de charger un fichier csv, voici ce que j'ai d'indiquer dans ma sortie de l'application (qui m'indique également ou je me trouve dans mon code grâce aux qDebug) :Code:void MainWindow::on_charge_clicked() { qDebug()<<"Bouton clické"; table.clear(); QString dossier=QFileDialog::getOpenFileName(this,tr("Open CSV"),"/",tr("CSV Files(*.csv)")); QFile file(dossier); if (!file.open(QIODevice::ReadOnly)){ qDebug()<<file.errorString(); } while(!file.atEnd()){ line = file.readLine(); table.append(line); } if(!table.isEmpty()) { RecupValeur(); } } void MainWindow::RecupValeur() { table.removeFirst(); qDebug()<<"avant boucle"; QStringList SplitTable; for(int i=0; i<table.size(); i++) { qDebug()<<"avant séparateur"; SplitTable=line.split(","); ValeurTemps[i]=SplitTable.value(0); ValeurGyroX[i]=SplitTable.value(1); qDebug()<<ValeurTemps[i]; qDebug()<<ValeurGyroX[i]; } }
Démarrage de C:\Users\Vincent\Documents\c++ \QCM\build-QCM_Serveur-Desktop_Qt_5_7_0_MinGW_32bit-Debug\debug\QCM_Serveur.exe...
Bouton clické
shell\comdlg32\fileopensave.cp p(14274)\comdlg32.dll!73CD2833 : (caller: 73D0211C) ReturnHr(1) tid(2bd4) 80004005 Erreur non spécifiée
CallContext:[\PickerModalLoop]
avant boucle
avant séparateur
ASSERT failure in QVector<T>:: operator[]: "index out of range", file C:\Qt\5.7\mingw53_32\include/QtCore/qvector.h, line 433
C:\Users\Vincent\Documents\c++ \QCM\build-QCM_Serveur-Desktop_Qt_5_7_0_MinGW_32bit-Debug\debug\QCM_Serveur.exe s'est terminé avec le code 3
Comment puis-je corriger mon code de façon à obtenir le résultat que je souhaite c'est-à-dire, enregistrer les deux premières valeurs de chaque ligne de mon fichier csv et ainsi à l'aide de mon QVector faire appel quand j'en ai besoin à la valeur qui se trouve à ValeurTemps[156] par exemple et pouvoir l'utiliser dans des calculs ?
Merci d'avance pour vos réponses,
Cordialement,
Vincent DUGUET
-----