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++ Discussion :

Problème sur un flux d'entrée à partir d'un fichier.txt


Sujet :

C++

  1. #1
    Membre à l'essai
    Inscrit en
    Juillet 2006
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 52
    Points : 13
    Points
    13
    Par défaut Problème sur un flux d'entrée à partir d'un fichier.txt
    Bonjour,

    J'avais évoqué auparavant n ma difficulté pour créer une fonction qui puisse lire à partir d'un fichier ".txt" une matrice trinagulaire supérieure et la stocker dans une variable matrice que j'ai définie préalablement.

    N'étant pas expert en c++, j'ai codé en faisant abstraction de la gestion dynamique de la mémoire ce qui me joue des tours maintenant.

    Je vous rapelle mon code qui marche dans certains cas et qui est le suivant :


    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
    Code :
    #include "essai.h"
    #include <iostream>
    #include <fstream>
    #include <iomanip>
    using namespace std;
     
     
    using namespace std;
     
    int main()
    {
      // Ouverture du fichier
    		 ifstream fichierEntree("c:\\test1.txt", ios::in);
     
      // Test d'ouverture du fichier
        if (!fichierEntree) {
            cerr << "Problème d'ouverture de fichier" << endl;
            exit(1);
        }
     
        char* ligne;
        int i = 0;
        char * err = NULL;
    	//double z; 
     
        ligne = new char[10];
        fichierEntree.getline(ligne, 4);
        int conv1 = strtoul(ligne,0,10);
    	ArrayLengthSpecifier dimension(conv1);
    	cout << conv1 << endl;
    	SymmetricMatrix covariance(dimension);
     
        int longueur;
     
        do
    		 {
    		 i = i + 1;
    		 longueur = 9 * i + 1;
    		 ligne = new char [longueur];//format "0.00E+00"
    		 //donc 8 caractères; 9i=8i+ (i-1) espaces + élt nul terminal
    		 fichierEntree.getline(ligne,longueur);
    		 cout << ligne << endl;
     
     
    		 for (int j=1;j<=i;j++)
    		{
    			char temp[9];
    			for (int k=0;k<=7;k++)
    			{	
    				temp[8]=0;
    				if (j==1)
    				temp[k] = ligne[k];
    				else
    				temp[k] = ligne[9* (j - 1) + k ];//attention dimension de 0 à n-1
     
    			}
    			const char* caractere=temp;
    			cout << caractere << endl;
    			covariance(i,j) = 2 * strtod(caractere, &err); 
    			cout << covariance(i,j) << endl;
    			cout << covariance(j,i) << endl;
    		}
    		delete[] ligne;	
     
    		 }
    		 while (!fichierEntree.eof());
     
        fichierEntree.close();
    }
    Ce code marche bien sur des matrices de types suivant :


    Code :
    3
    1.23E-02
    1.24E-02 1.26E-02
    1.27E-02 1.23E-04 1.23E-03
    Par contre dès qu'il s'agit d'une matrice qui contient un nombre négatif (par exemple) :


    Code :
    3
    1.23E-02
    -1.24E-02 1.26E-02
    1.27E-02 1.23E-04 1.23E-03
    Ma définition qui fixe la dimension de temp à 9, devient fausse puisque celle-ci avec le signe moins deviens égale à 10.

    Aurriez vous une idée qui puisse contourner le problème??.

    J'ai pensé à imbriquer une instruction if à l'intérieure de ma boucle qui test si le premier caractère est "-" et à ce moment fait une réallocation de temp pour porter sa dimension à 10. Mais je ne sais pas comment coder ça en c++. Auriez vous une idée à me proposer, je suis vraiment bloquer la dessus ??

    Merci de votre aide
      0  0

  2. #2
    Membre éclairé

    Inscrit en
    Juin 2004
    Messages
    1 397
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 1 397
    Points : 763
    Points
    763
    Par défaut
    Et pourquoi (sachant que je ne vois pas tellement l'intérêt de faire si compliqué) ne pas fixer la dimension à 10, en incluant juste le caractère du signe ?
    Pourquoi ne pas utiliser de malloc() ?
    Pourquoi ce code ?

    Ma première question est sans doute la plus pertinente des trois
    Aucune réponse à une question technique par MP.
    Ce qui vous pose problème peut poser problème à un(e) autre

    http://thebrutace.labrute.fr
      0  0

  3. #3
    Expert éminent sénior
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 275
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 275
    Points : 10 985
    Points
    10 985
    Par défaut
    Et pourquoi ne pas utiliser le c++
    Merci de ne pas multiposter dans les forums (ni en MP . Hein?! )
    J'ai déjà répondu dans l'autre fil.
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...
      0  0

  4. #4
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Merci d'éviter le multi-post, cela alourdit inutilement la base de données et surtout cela disperse les réponses.

    http://www.developpez.net/forums/sho...=188364&page=2
      0  0

Discussions similaires

  1. Réponses: 8
    Dernier message: 15/09/2018, 22h38
  2. Livre sur les flux d'entrée/sortie
    Par oodini dans le forum Livres
    Réponses: 3
    Dernier message: 04/04/2014, 17h41
  3. Réponses: 0
    Dernier message: 24/04/2012, 21h30
  4. Réponses: 1
    Dernier message: 14/04/2011, 12h39
  5. Réponses: 3
    Dernier message: 15/02/2006, 17h46

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