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

C++Builder Discussion :

sauvgarder une matrice dans un fichier TXT


Sujet :

C++Builder

  1. #1
    Nouveau membre du Club
    Inscrit en
    Mai 2005
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 34
    Points : 36
    Points
    36
    Par défaut sauvgarder une matrice dans un fichier TXT
    salut à tous,

    je voudrai sauvgarder une matrice dans un fichier texte, j'ai crée la variable j'ai sauvgardé la mmatrice puis j'ai sauvgardé le fichier dans un chemin, mais quand j'aouvre le fichier texte la matrice ne garde pas sa forme (nombre de lignes et de colonnes) les éléments s'affiche dans une seul colonne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    TStringList *L;
    L=new TStringList();
    for(i=0;i<=col;i++)
    for(j=0;j<=lig;j++)
    L->Add(FloatToStr(mat[i][j]));
    L->SaveToFile("c:\\matrice.txt");
    delete L;
    il existe un autre problème, je voudrai écrire dans ce fichier texte des chaine de carractères ex: lamatrice poinds puis les valeurs de la matrice.
    Merci d'avance.

  2. #2
    Membre chevronné

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    1 374
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 374
    Points : 1 759
    Points
    1 759
    Par défaut
    Salut !

    Je raisonne plus facilement à partir d'une lecture du tableau en tant que : Tab[ lignes ][ colonnes ]
    On suppose que NbLig et NbCol sont des bords exclusifs ( < max ) et non inclusifs ( <= max )

    Pour l'enregistrement ça devrait ressembler à ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    TStringList *L = new TStringList;
    L->Add(IntToStr(NbCol));
    for(y = 0; y < NbLig; y++)
        {
        for(x = 0;  x < NbCol; x++)
            {
            L->Add( FloatToStr(mat[ y ][ x ]) );
            }
        }
    L->SaveToFile("c:\\matrice.txt");
    delete L;
    A vérifier, mais pour la lecture du fichier ça devrait ressembler à ceci :

    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
     
    TStringList *L = new TStringList;
    L->LoadFromFile("c:\\matrice.txt");
    if(L->Count > 2)
        {
        int NbCol = L->Strings[0].ToIntDef(0);
        L->Delete(0);
        if(NbCol > 0)
            {
            int x;
            int y;
            for(int n = 0; n < L->Count; n++)
                {
                y = n / NbCol;
                x = n % NbCol;
                mat[ y ][ x ] = L->Strings[n].ToDouble();      
                }
            }
        }
    delete L;
    A plus !

  3. #3
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par malikakika Voir le message
    salut à tous,

    je voudrai sauvgarder une matrice dans un fichier texte, j'ai crée la variable j'ai sauvgardé la mmatrice puis j'ai sauvgardé le fichier dans un chemin, mais quand j'aouvre le fichier texte la matrice ne garde pas sa forme (nombre de lignes et de colonnes) les éléments s'affiche dans une seul colonne
    Ce n'est pas parce que l'on utilise C++ Builder qu'il ne vaut pas mieux écrire du code portable, (tu es suicidaire, ou quoi ? )...
    ( Un "TStringList" n'est rien d'autre qu'un qu'un vector de chaines : std::vector<std::string> )

    Et pourquoi ne pas écrire une petite classe matrice, du genre :
    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
     
    #include <cstdlib>
    #include <iostream>
    #include <fstream>
    #include <string>
     
    using namespace std;
     
    class CMatrice {
       int nbLignes_;
       int nbColonnes_;
       string strNom_;
     
       enum{
           ncMax_Lignes_ = 10,
           ncMax_Colonnes_ = 10
       };
    public:
       CMatrice( string strNom, int nbLignes, int nbColonnes):
                                     strNom_( strNom ),
                                     nbLignes_( nbLignes ),
                                     nbColonnes_( nbColonnes ){}
     
       float m_[ncMax_Lignes_][ncMax_Colonnes_];
     
       void saveToFile(string strNomFichier ) {
          fstream f;
          f.open( strNomFichier.c_str(), ios::out );
          f << strNom_ << " = [";
          for ( int i = 0; i < nbLignes_ ; ++i ) {
             for ( int j = 0; j < nbColonnes_ ; ++j ) {
                f << m_[i][j] << " ";
             }
             f << ";" << endl;
          }
          f << "]";
          f.close();
       }// saveToFile
     
    };// class CMatrice
     
     
    int main(int argc, char *argv[]) {
       int nbLignes = 3, nbColonnes = 4;
       CMatrice mat("A", nbLignes, nbColonnes );
       // Remplissage :
       int nCpt = 1;
       for (int i = 0; i < nbLignes; ++i){
          for (int j = 0; j < nbColonnes; ++j){
             mat.m_[i][j] = nCpt;
             ++nCpt;
          }
       }
     
       // Enregistrement
       mat.saveToFile( "ma matrice.txt" );
     
       system("PAUSE");
       return EXIT_SUCCESS;
    }// main
    Ce qui donne le fichier "ma matrice.txt" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    A = [1 2 3 4 ;
    5 6 7 8 ;
    9 10 11 12 ;
    ]
    (L'intérêt est que ce format est prêt à être copié-collé dans Scilab (ou MatLab) pour faire d'autres calculs ou vérifications... [ il est "Scilab-Ready", comme diraient certaines multinationales américaines... )

    NB : le code de la classe CMatrice n'est pas du tout optimisé, on peut faire beauuuucoup mieux !

Discussions similaires

  1. Réponses: 4
    Dernier message: 12/07/2006, 20h54
  2. Réponses: 4
    Dernier message: 08/04/2006, 09h10
  3. Réponses: 5
    Dernier message: 02/03/2006, 11h04
  4. enregistrer une donnee dans un fichier txt
    Par zorglub88 dans le forum MFC
    Réponses: 33
    Dernier message: 27/01/2006, 15h13
  5. Ecrire le résultat d'une query dans un fichier txt
    Par jbaers dans le forum Bases de données
    Réponses: 2
    Dernier message: 11/11/2005, 01h49

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