IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Discussion :

Exporter des QList<double> dans un fichier CSV

  1. #1
    Membre à l'essai
    Homme Profil pro
    Technicien conception industrielle
    Inscrit en
    Avril 2020
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Technicien conception industrielle
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2020
    Messages : 18
    Points : 18
    Points
    18
    Par défaut Exporter des QList<double> dans un fichier CSV
    Bonjour


    Voila ma problematique du jour .
    J'ai creer précédemment dans mon programme 6 QList<double> de meme taille qui contienne chacunes des variable double (800 variables par liste)

    L'objectif est de mettre toutes les listes dans un seul fichier csv suivant ce schema:

    Valeur1QList1; Valeur1Qlist2 ; Valeur1QList3 ; Valeur1QList4 ; Valeur1QList5; Valeur1QList6
    Valeur2QList1; Valeur2Qlist2 ; Valeur2QList3 ; Valeur2QList4 ; Valeur2QList5; Valeur2QList6
    Valeur3QList1; Valeur3Qlist2 ; Valeur3QList3 ; Valeur3QList4 ; Valeur3QList5; Valeur3QList6
    Valeur4QList1; Valeur4Qlist2 ; Valeur4QList3 ; Valeur4QList4 ; Valeur4QList5; Valeur4QList6
    etc...

    j'ai écrit ça :

    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
     QFile *fichierCSV = new QFile("D:/Mes Documents/Arduino/PROJETS YANN/BANC AAC/LOGICIEL/BANC_ARBRE_A_CAMES_V1_0_2/EXTRACTION.csv");
     
            // Ouverture du fichier en mode texte et en écriture seule
            if (fichierCSV->open(QFile::WriteOnly | QIODevice::Text))
            {
                // Ecriture de l'en-tête
                QTextStream entete(fichierCSV);
     
                entete << QString::fromUtf8("pas;Vcapteur1;Vcapteur2;Vcapteur1Corrige;Vcapteur2Corrige;angle") << endl;
     
                // Ecriture des données
                QTextStream datas(fichierCSV);
     
                datas << "\"" << listecodeur << "\"";
                datas << ";";
                datas << "\"" << listeVcapteur1 << "\"";
                datas << ";";
                datas << "\"" << listeVcapteur2<< "\"";
                datas << ";";
                datas << "\"" << listeVcapteur1Corrige<< "\"";
                datas << ";";
                datas << "\"" << listeVcapteur2Corrige<< "\"";
                datas << ";";
                datas << "\"" << listeangle<< "\"";
                datas << ";";
                datas << endl;
     
                // On ferme le fichier
                fichierCSV->close();
     
                delete fichierCSV;
            }
            else
            {
                QMessageBox::critical(0,"Erreur !",("Impossible d'ouvrir le fichier datas.csv"));
                delete fichierCSV;
            }
    biensur cela ne fonctionne pas... du moin la création du fichier fonctionne mais pas le remplissage (ce à quoi je m'attendais)
    jai tester d'utuliser la fonction Refactor qui ma rajouter un & devant le nom de la liste. l'operande bit a bit ma permis de lancer le programme mais forcement cela n'est pas bon .
    j'obtient ceci dans mon fichier csv :

    *******************************************************************
    pas;Vcapteur1;Vcapteur2;Vcapteur1Corrige;Vcapteur2Corrige;angle
    "0x13cb918";"0x13cb910";"0x13cb908";"0x14902b0";"0x14902b8";"0x14902c0";

    ********************************************************************
    Du coup je suppose :

    1/ que je dois convertir mes QList<double> en QStringList (pour passer des variables numériques en caractères)
    > soit ligne par ligne en utilisant QString::number ()
    >soit toute les valeurs de la liste d'un coup avec ???

    2 / que je fasse une boucle pour inclure toutes les lignes des listes et pas seulement la 1ère?

    ou bien une méthode autre pour faire tout ça ??


    Merci a vous

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonsoir,

    Pour commencer, évite de te compliquer inutilement les choses avec un pointeur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    QFile *fichierCSV = new QFile("D:/Mes Documents/Arduino/PROJETS YANN/BANC AAC/LOGICIEL/BANC_ARBRE_A_CAMES_V1_0_2/EXTRACTION.csv");
    QFile fichierCSV("D:/Mes Documents/Arduino/PROJETS YANN/BANC AAC/LOGICIEL/BANC_ARBRE_A_CAMES_V1_0_2/EXTRACTION.csv");.

    Ce que tu souhaite faire, c'est stocker tes valeurs comme ceci :
    listecodeur[0] ; listeVcapteur1[0] ; listeVcapteur2[0] ; listeVcapteur1Corrige[0] ; listeVcapteur2Corrige[0] ; listeangle[0]
    listecodeur[1] ; listeVcapteur1[1] ; listeVcapteur2[1] ; listeVcapteur1Corrige[1] ; listeVcapteur2Corrige[1] ; listeangle[1]
    listecodeur[2] ; listeVcapteur1[2] ; listeVcapteur2[2] ; listeVcapteur1Corrige[2] ; listeVcapteur2Corrige[2] ; listeangle[2]
    listecodeur[3] ; listeVcapteur1[3] ; listeVcapteur2[3] ; listeVcapteur1Corrige[3] ; listeVcapteur2Corrige[3] ; listeangle[3]
    etc.
    Or, s'il existait une surcharge de l'opérateur << pour les listes, ton code actuel serait plutôt enclin à stocker :
    <toutes les valeurs de listecodeur> ; <toutes les valeurs de listeVcapteur1> ; <toutes les valeurs de listeVcapteur2> ; <toutes les valeurs de listeVcapteur1Corrige> ; <toutes les valeurs de listeVcapteur2Corrige> ; <toutes les valeurs de listeangle>
    Tu as besoin d'une boucle qui va écrire chaque ligne l'une après après l'autre, en allant chercher chaque élément de chaque liste. (Et non, tu n'as besoin d'aucune conversion, l'opérateur << est déjà surchargé pour le type double, et bien d'autres.)

    Note que si tu ajoutes &liste, tu écris alors l'adresse en mémoire où se situe la liste.
    Dernière modification par Invité ; 22/04/2020 à 20h16.

  3. #3
    Responsable Qt & Livres


    Avatar de dourouc05
    Homme Profil pro
    Ingénieur de recherche
    Inscrit en
    Août 2008
    Messages
    26 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur de recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2008
    Messages : 26 617
    Points : 188 587
    Points
    188 587
    Par défaut


    Comme tu travailles avec des matrices et des vecteurs, si tu as une bibliothèque comme Eigen ou autre, tu as des fonctions toutes faites pour passer en CSV : http://eigen.tuxfamily.org/dox/struc...1IOFormat.html, http://arma.sourceforge.net/docs.html#save_load_mat.

    Au fait, n'oublie pas de marquer les anciennes discussions comme résolues dès qu'elles le sont .
    Vous souhaitez participer aux rubriques Qt (tutoriels, FAQ, traductions) ou HPC ? Contactez-moi par MP.

    Créer des applications graphiques en Python avec PyQt5
    Créer des applications avec Qt 5.

    Pas de question d'ordre technique par MP !

  4. #4
    Membre à l'essai
    Homme Profil pro
    Technicien conception industrielle
    Inscrit en
    Avril 2020
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Technicien conception industrielle
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2020
    Messages : 18
    Points : 18
    Points
    18
    Par défaut
    merci a vous

    C'est appréciable d'avoir de l'aide lorsqu'on est débutant . Je prend votre role dans un autre domaine et je sais combien parfois cela peu etre pénible ... donc encore merci


    Oui je vais cloturer les discussions résolues.

    Pour les matrices c'est Benjamin qui s'en charge. Mais avant qu'il attaque de travailler avec la matrice il lui faut ce fichier csv
    .

  5. #5
    Membre à l'essai
    Homme Profil pro
    Technicien conception industrielle
    Inscrit en
    Avril 2020
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Technicien conception industrielle
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2020
    Messages : 18
    Points : 18
    Points
    18
    Par défaut
    parce que j'aime bien voir le code de la solution dans mes recherches et non un simple commentaire " merci j'ai reussi , ça fonctionne" voila la réponse à ma question initiale ( ya peut petre mieu mais cela fonctionne ):

    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
     // Ouverture du fichier en mode texte et en écriture seule
            if (fichierCSV->open(QFile::WriteOnly | QIODevice::Text))
            {
                // Ecriture de l'en-tête
                QTextStream entete(fichierCSV);
     
                entete << QString::fromUtf8("pas;Vcapteur1;Vcapteur2;Vcapteur1Corrige;Vcapteur2Corrige;angle") << endl;
     
               // Ecriture des données
               QTextStream datas(fichierCSV);
     
                    for (int i=0;i<listecodeur.size();i++)
                {
                datas << "\"" << listecodeur[i]<<"\"";
                datas << ";";
                datas << "\"" << listeVcapteur1[i] << "\"";
                datas << ";";
                datas << "\"" << listeVcapteur2[i]<< "\"";
                datas << ";";
                datas << "\"" << listeVcapteur1Corrige[i]<< "\"";
                datas << ";";
                datas << "\"" << listeVcapteur2Corrige[i]<< "\"";
                datas << ";";
                datas << "\"" << listeangle[i]<< "\"";
                datas << ";";
                datas << endl;
                    }
                // On ferme le fichier
                fichierCSV->close();
     
                delete fichierCSV;
            }
            else
            {
                QMessageBox::critical(0,"Erreur !",("Impossible d'ouvrir le fichier datas.csv"));
                delete fichierCSV;
            }

  6. #6
    Responsable Qt & Livres


    Avatar de dourouc05
    Homme Profil pro
    Ingénieur de recherche
    Inscrit en
    Août 2008
    Messages
    26 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur de recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2008
    Messages : 26 617
    Points : 188 587
    Points
    188 587
    Par défaut
    Très bonne initiative de mettre ton code !

    Deux commentaires sur ton code : le mélange de tabulations et d'espaces pour l'indentation (surtout visible dans un navigateur, pour qui une tabulation fait huit espaces), je passe sous silence les indentations presque réussies à un ou deux espaces près ; pas besoin d'un pointeur sur QFile ici. Moins important, tu écris un fichier CSV, mais tu utilises des points virgules au lieu de virgules (le format est tellement peu défini que même ce qui contrevient à son nom lui correspond ).
    Vous souhaitez participer aux rubriques Qt (tutoriels, FAQ, traductions) ou HPC ? Contactez-moi par MP.

    Créer des applications graphiques en Python avec PyQt5
    Créer des applications avec Qt 5.

    Pas de question d'ordre technique par MP !

  7. #7
    Membre à l'essai
    Homme Profil pro
    Technicien conception industrielle
    Inscrit en
    Avril 2020
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Technicien conception industrielle
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2020
    Messages : 18
    Points : 18
    Points
    18
    Par défaut
    pour l'indentation ( encore un mot complexe ) je fais telelment de va et viens qu'en j'ecris le code , d'essais en tout genre que du coup ça ressemble plus a un code propre. Du coup à la fin j'essaye de remettre de l'ordre souvent avec des espaces

    Pour le csv il est vrai qu'on est parti sur des ";" car la source de base donc les datas qui viennent de l'arduino sont envoyées avec des ";". Cela peut etre rapidement corrigé et heureusement negène pas le fonctionnement du csv qui effectivement et pas très clairement défini ' (ca m'arrange )

    Merci à vous

  8. #8
    Responsable Qt & Livres


    Avatar de dourouc05
    Homme Profil pro
    Ingénieur de recherche
    Inscrit en
    Août 2008
    Messages
    26 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur de recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2008
    Messages : 26 617
    Points : 188 587
    Points
    188 587
    Par défaut
    Citation Envoyé par YannGTT Voir le message
    pour l'indentation ( encore un mot complexe ) je fais telelment de va et viens qu'en j'ecris le code , d'essais en tout genre que du coup ça ressemble plus a un code propre.
    Tu n'es pas le seul à devoir modifier du code comme ça . Il n'empêche, l'indentation est tellement pratique une fois bien faite que c'est difficile de s'en passer. Qt Creator peut le faire pour toi : https://doc.qt.io/qtcreator/creator-...nd-indentation. Au lieu de jouer avec des espaces, joue avec la touche tabulation (en sélectionnant les parties de code à indenter et à désindenter).
    Vous souhaitez participer aux rubriques Qt (tutoriels, FAQ, traductions) ou HPC ? Contactez-moi par MP.

    Créer des applications graphiques en Python avec PyQt5
    Créer des applications avec Qt 5.

    Pas de question d'ordre technique par MP !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Python 2.X] Compter des chiffres contenu dans un fichier CSV avant import Excel
    Par Invité dans le forum Général Python
    Réponses: 2
    Dernier message: 01/11/2014, 08h21
  2. comment éliminer des colonnes vides dans un fichier csv
    Par xavier81 dans le forum Développement de jobs
    Réponses: 3
    Dernier message: 10/05/2012, 23h30
  3. Exporter des données xml dans un fichier XHTML
    Par StAfX dans le forum XML/XSL et SOAP
    Réponses: 3
    Dernier message: 02/02/2009, 15h21
  4. Réponses: 1
    Dernier message: 15/11/2007, 13h52
  5. Réponses: 12
    Dernier message: 27/01/2006, 11h07

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo