Bonjour à tous,

Je cherche une bonne volonté pour m'aider à résoudre mon exercice. En fait, je souhaite récupérer des données de plusieurs fichiers csv se trouvant dans un répertoire afin de les sauvegarder dans un autre fichier Excel et dans le même répertoire.

Pour chacun des fichiers, je récupères les même types de données mais à partir de la deuxième ligne, que je mets dans un tableau. Par la suite il faut créer un autre tableau devant contenir en 1ère ligne des String (les titres des données) puis à partir de la deuxième ligne mettre toutes les données sauvegarder dans le premier tableau.

J'ai fait une grosse partie à l'aide de bout de code mais j'ai du mal pour la suite. J'ai des problèmes avec la structure Données et je ne sais pas comment sauvegarder tout dans un nouveau fichier Excel du même répertoire. Je vous mets mon script :

Fichier header : DataStored.h :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#ifndef DATASTORED_H
#define DATASTORED_H
#include <QApplication>
#include <QtGui>
#include <QWidget>
#include <QVBoxLayout>
#include <QHBoxLayout>
#include <QPushButton>
#include <iostream>
#include <fstream>
#include <QVector>
 
struct Donnees{
    double colonne3, colonne4, colonne5, colonne6, colonne7, colonne8, colonne9, colonne10;
    int colonne14;
     QString colonne0, colonne1, colonne2, colonne11, colonne12, colonne13, colonne15;
};
 
class DataStored: public QWidget
{
    Q_OBJECT
 
public :
 
    DataStored();
public slots :
    void recupererDonneesARanger(QVector<Donnees>& tableau);
 
private :
    QPushButton *boutonQuitter;
    QPushButton *boutonRemove;
    QHBoxLayout *layoutBouton;
    QVBoxLayout *layoutPrincipal;
 
 
 
};
 
 
#endif // DATASTORED_H
Le fichier source : DataStored.cpp
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
#include"DataStored.h"
 
#include<QApplication>
#include<QtGui>
#include<QWidget>
#include<QVBoxLayout>
#include<QHBoxLayout>
#include<QPushButton>
#include<QFileDialog>
#include<QVector>
#include<QMessageBox>
#include<QTextStream>
#include<QByteArray>
#include<QString>
 
 
 
DataStored::DataStored():QWidget()
 
{
 
    //Création du layoutprincipal pour y mettre les boutons
    layoutPrincipal=new QVBoxLayout;
 
    //Création des boutons Storing et Quitter
    boutonRemove =new QPushButton("&Storing");
    boutonQuitter =new QPushButton("&Quitter");
 
    //Positionner les boutons sur le layoutprincipal
    layoutBouton=new QHBoxLayout;
    layoutBouton->setAlignment(Qt::AlignCenter);
    layoutBouton->addWidget(boutonRemove);
    layoutBouton->addWidget(boutonQuitter);
    layoutPrincipal->addLayout(layoutBouton);
 
    setLayout(layoutPrincipal);
 
    //titre du layoutprincipal
    setWindowTitle("Rangerdesdonnées");
    setWindowIcon(QIcon("icone.png"));
    resize(200,250);
 
    //Connecter les boutons à des signaux et slots
    QWidget::connect(boutonRemove,SIGNAL(clicked()),this,SLOT(recupererDonneesARanger()));
    QWidget::connect (boutonQuitter, SIGNAL(clicked()), qApp, SLOT(quit()));
}
 
struct Donnees
{
    double colonne3, colonne4, colonne5, colonne6, colonne7, colonne8, colonne9, colonne10;
    int colonne14;
    QString colonne0, colonne1, colonne2, colonne11, colonne12, colonne13, colonne15;
 
};
 
 
void DataStored::recupererDonneesARanger(QVector<Donnees>& tableau)
{
 
    //Ouverture d'un dossier contenant les données à traiter
    //QString dossier=QFileDialog::getExistingDirectory(this);
 
    //Import du chemin du repertoire dans dossier
    QString dossier=QFileDialog::getExistingDirectory(this,tr("OpenDirectory"),"/home",QFileDialog::ShowDirsOnly|QFileDialog::DontResolveSymlinks);
 
    QStringListlisteFichers=QDir(dossier).entryList(QDir::Files);
    Donnees data;
 
    //Création de tableau pour sauvegarder les données
    int compteur(2);
 
    for(compteur=2;compteur<listeFichers.size();compteur++)
    {
        //Données des premières colonnes
 
        //Nom du fichier courant
        QString nomFichier=listeFichers.at(compteur);
 
        //Récupérer les 5 1ers charactères à mettre dans la colonne nom du sujet
        QString sujet;
        int i;
        for(i=0;i<5;i++)
        {
            sujet+=nomFichier.at(i);
        }
 
        data.colonne0=sujet;
 
        //Récupérer le nom du test
 
        if(nomFichier.at(6)=='a')
 
        {
            data.colonne1="Anti";
        }
        else if(nomFichier.at(6)=='g')
        {
            data.colonne1="Gap";
        }
        else if(nomFichier.at(6)=='o')
        {
            data.colonne1="Overlap";
        }
        else if(nomFichier.at(6)=='s')
        {
            data.colonne1="Step";
        }
        else
        {
            data.colonne1="Updown";
        }
 
        //Récupérer le nom de l'oeil
 
        if(nomFichier.at(nomFichier.length()-5)=='D')
        {
            data.colonne2="OD";
        }
 
        else
        {
            data.colonne2="OG";
        }
 
        //Récupérer les données de chaque ligne,à partir de la deuxième ligne de chaque fichier
 
        QFilefichier(listeFichers.at(compteur).toLocal8Bit().constData());
 
        QMessageBox messageAlert;
 
        if(!fichier.open(QFile::ReadOnly)){
 
            messageAlert.setWindowTitle("Attention!");
            messageAlert.setIcon(QMessageBox::Warning);
            messageAlert.setText(QString::fromUtf8("Problèmenoncritique!"));
            messageAlert.setInformativeText(QString::fromUtf8("<center><big>Lefichier:</big>\"<b>%1</b>\"<big>estabsentduserveur!</big></center>").arg(listeFichers.at(compteur).toLocal8Bit().constData()));
            messageAlert.exec();
        }
 
        QTextStream flux(&fichier);
 
        QString titre=flux.readLine();
 
        QStringList champtitre=titre.split(";");
 
        while(!flux.atEnd()){
 
            QString ligne=flux.readLine();
            QStringList champ=ligne.split(";");
            data.colonne0=data.colonne0;
            data.colonne1=data.colonne1;
            data.colonne2=data.colonne2;
            data.colonne3=champ.at(0).toDouble();//pourdesréels
            data.colonne4=champ.at(1).toDouble();//pourdesréels
            data.colonne5=champ.at(2).toDouble();;//pourdesréels
            data.colonne6=champ.at(3).toDouble();//pourdesréels
            data.colonne7=champ.at(4).toDouble();//pourdesréels
            data.colonne8=champ.at(5).toDouble();//pourdesréels
            data.colonne9=champ.at(6).toDouble();//pourdesréels
            data.colonne10=champ.at(7).toDouble();//pourdesréels
            data.colonne11=champ.at(8);//pourdutexte
            data.colonne12=champ.at(9);//pourdutexte
            data.colonne13=champ.at(10);//pourdutexte
            data.colonne14=champ.at(11).toInt();//pourdesentiers
            data.colonne15=champ.at(12);//pourdutexte
            //etc...
 
            //Sauvegarder chaque ligne dans le tableau
            tableau.push_back(data);
        }
    }
 
    //Sauvegarder les données du tableau dans un autre fichier xls du meme repertoire en précisant les titres à la 1ère ligne (ça ne marche pas la suite)
    QVector<QStringList> allData(16);
    allData.at(0)="Sujet";allData.at(1)="Test";allData.at(2)="Oeil";allData.at(3)="PositionLabel(ms)";allData.at(4)="DébutSaccade(ms)";allData.at(5)="DébutSaccade(°)";allData.at(6)="FinSaccade(ms)";allData.at(7)="FinSaccade(°)";
    allData.at(8)="Latence(ms)";allData.at(9)="VitesseMoyenne(°.s-1)";allData.at(10)="VitesseMax(°.s-1)";allData.at(11)="Skewness(math)";allData.at(12)="Skewness(estim)";allData.at(13)="Labeldedépart";allData.at(14)="Numérodelasaccade";allData.at(15)="Description";
 
    allData.push_back(tableau);
 
    //Comment sauvegarder tout ça dans un fichier xls du meme repertoire dossier
}
Le fichier main :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include<QApplication>
#include<QtGui>
#include<QWidget>
#include"DataStored.h" 
 
 
 int main(intargc,char*argv[]) 
{ 
    QApplicationapp(argc,argv); 
    DataStored fenetre; 
 
 
    fenetre.show(); 
 
 
    return app.exec(); 
}
Chaque fichier se présente comme suit (Exple Nom fichier : 044 N_antile1_2012.03.03_13.17.10.ODX):



Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
Position Label(ms)	Début Saccade(ms)	Début Saccade(°)	Fin Saccade(ms)	Fin Saccade(°)	Latence(ms)	Vitesse Moyenne(°.s-1)	Vitesse Max(°.s-1)	Skewness (math)	Skewness (estim)	Label de départ	Numéro de la saccade	Description
3702	4040	0,95	4114	14,38	338	181,43	347,95	NA	NA	cible=G 	0	saccade
9403	9668	1,84	9735	17,69	265	236,49	358,77	NA	NA	cible=G 	1	saccade
16108	16580	1,15	16617	-7,78	472	-241,28	-349,72	NA	NA	cible=D 	2	saccade
21809	22127	0,61	22208	-18,56	318	-236,71	-471,75	NA	NA	cible=D 	3	saccade

Le résultat final doit être :


Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
Sujet	Test	Œil	Position Label(ms)	Début Saccade(ms)	Début Saccade(°)	Fin Saccade(ms)	Fin Saccade(°)	Latence(ms)	Vitesse Moyenne(°.s-1)	Vitesse Max(°.s-1)	Skewness (math)	Skewness (estim)	Label de départ	Numéro de la saccade	Description
044 N	Anti	OD	3702	4040	0,95	4114	14,38	338	181,43	347,95	NA	NA	cible=G 	0	saccade
044 N	Anti	OD	9403	9668	1,84	9735	17,69	265	236,49	358,77	NA	NA	cible=G 	1	saccade
044 N	Anti	OD	16108	16580	1,15	16617	-7,78	472	-241,28	-349,72	NA	NA	cible=D 	2	saccade
044 N	Anti	OD	21809	22127	0,61	22208	-18,56	318	-236,71	-471,75	NA	NA	cible=D 	3	saccade
Je suis débutant donc soyez indulgents sur des petites erreurs. Merci de bien vouloir m'aider car ça me permettra de gagner beaucoup de temps vu que les données à sauvegarder sont beaucoup.

Merci d'avance.