Partage
  • Partager sur Facebook
  • Partager sur Twitter

Problème sauvegarde données tableau

    3 septembre 2018 à 17:29:03

    Bonjour,

    Je cherche à enregistrer les données contenues dans chaque case de mon tableau dans un fichier txt. Pour cela, j'ai écris le code suivant:

    void MainWindow::save()
    {
        QFile* fichier = new QFile("Données"+m_nom);
        fichier->resize(0);
        int r = MainWindow::modeleTableau->rowCount();
        for (int i =0; i<r;i++)
        {
            for (int j =0; j<10; j++)
            {
                QModelIndex index = MainWindow::modeleTableau->index(i, j, QModelIndex());
                QVariant a = MainWindow::modeleTableau->data(index, Qt::DisplayRole);
                QString msg = a.toString();
                if ((i==r-1) & (j==9))
                {
                    fichier->open(QIODevice::ReadWrite | QIODevice::Text | QIODevice::Append);
                    QTextStream stream(fichier);
                    stream << msg;
                    fichier->close();
                }
                else
                {
                    fichier->open(QIODevice::ReadWrite | QIODevice::Text | QIODevice::Append);
                    QTextStream stream(fichier);
                    stream << msg;
                    stream << '\n' << flush;
                    fichier->close();
                }
            }
         }
    }

    Lorsque je sauvegarde une première fois, pas de problème, le txt renvoyé est tel que je le souhaite. Cependant, si je sauvegarde une nouvelle fois, de nouvelle lignes vides se rajoutent, arrangeant ainsi mon tableau d'une manière totalement différente que précédemment.

    Je vous remercie par avance de votre aide :)

    • Partager sur Facebook
    • Partager sur Twitter
      4 septembre 2018 à 20:19:14

      Bonjour, pourquoi tu ouvres ton fichier, le modifie et le ferme pour chaque tour de boucle??

      Essayes:

      void MainWindow::save()
      {
          QFile* fichier = new QFile("Données"+m_nom);
          fichier->resize(0);
          int r = MainWindow::modeleTableau->rowCount();
      fichier->open(QIODevice::ReadWrite | QIODevice::Text | QIODevice::Append);
                      QTextStream stream(fichier);
          for (int i =0; i<r;i++)
          {
              for (int j =0; j<10; j++)
              {
                  QModelIndex index = MainWindow::modeleTableau->index(i, j, QModelIndex());
                  QVariant a = MainWindow::modeleTableau->data(index, Qt::DisplayRole);
                  QString msg = a.toString();
                  stream << msg;
                  if (!((i==r-1) && (j==9)))
                 {
                      stream << '\n' << flush;
                  
                  }
              }
           }
               fichier->close();
      }



      • Partager sur Facebook
      • Partager sur Twitter
        5 septembre 2018 à 10:39:53

        Une simple erreur d’inattention. Ton code ne change rien, le décalage reste identique.
        • Partager sur Facebook
        • Partager sur Twitter
          5 septembre 2018 à 12:51:27

          QFile est classe a semantique de valeur, n'utilises pas new pour créer un QFile. Tu as une fuite mémoire.

          A priori, aucune raison que le fait d'ecrire 2 fois les memes données donne 2 resultats différents. C'est que tes données sont modifiées. Vérifies la taille de ton tableau a chaque fois que tu appelles cette fonction. Et passe en debug en pas a pas pour voir ce qu'il se passe.

          (Tu fais quoi exactement ? Tu ecris 2 fois ton tableau ? Ou tu ecris ton tableau, le lis, puis le réecrit ?)

          • Partager sur Facebook
          • Partager sur Twitter

          Problème sauvegarde données tableau

          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
          • Editeur
          • Markdown