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 :

Lecture d'une matrice et d'un vecteur dans un fichier texte


Sujet :

C

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 29
    Points : 20
    Points
    20
    Par défaut Lecture d'une matrice et d'un vecteur dans un fichier texte
    Bonjour à tous,

    Voila j'essaye de lire une matrice et un vecteur dans un fichier texte en langage C.
    Quand je créé une matrice dans un fichier texte avec 1 seul chiffre par nombre , ma lecture se passe bien. Mais quand j'essaye de lire une matrice (que je créé toujours moi même dans mon fichier texte) avec des moins ou des nombres à virgule, je ne récupére pas la bonne matrice, il y a différents décalages dans le parcour de mon fichier que je n'arrive pas à gérer.

    Dans ce message il y a le fichier matrice.c qui correspond au code du programme,matrice.txt qui correspond à une lecture de fichier qui se passe bien et matrice2.txt qui correspond à une lecture de fichier qui se passe mal.

    Voilà merci pour vos futurs réponses

    A bientot

    Flo62
    Fichiers attachés Fichiers attachés

  2. #2
    Membre averti Avatar de Pierre Maurette
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    283
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 283
    Points : 390
    Points
    390
    Par défaut
    Je ne ferais pas nécessairement comme vous, et si vous n'êtes pas dans "l'urgence universitaire", peut-être pourriez-vous remettre un peu tout ça à plat. Ceci dit, je n'ai pas vraiment regardé l'ensemble.
    Je vous propose un "pétas", donc je continue sur la voie que vous avez initiée. Remplacer le bloc while de vos lignes 57 - 79 (et virez la déclaration de b) par:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    	while (fgets(buffer, size, inputFile) != NULL) {
    		col = 0;
    		while (*buffer == ' ' || *buffer == '\t')buffer++;
    		A[lig][col] = strtod(buffer, NULL);
    		for (col=1; col<taillemat+1; col++) {
    			while (*buffer != ' ' && *buffer != '\t')buffer++;
    			while (*buffer == ' ' || *buffer == '\t')buffer++;
    			*(col==taillemat ? *(V + lig) : *(A + lig) + col) = strtod(buffer, NULL);
    		}
    		lig++;
    	}
    - utilisation de strtod() directement, plutôt que strtol().
    - positionnement en "sautant" les caractères qui sont (ou ne sont pas) des espaces ou des tabulations.
    - la ligne avec l'opérateur ternaire ?: est un gag, elle ne corrige rien qui n'allait pas.

    Bon courage...

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 29
    Points : 20
    Points
    20
    Par défaut
    Merci beaucoup Pierre Maurette de m'avoir aider pour cet algo. Il ya juste le ternaire que j'ai du mal a comprendre car j'ai essayé de le retranscrire avec une simple condition if... else.. mais je n'y arrive pas trop.

    Sinon j'ai une derniére petite question c'est le fait que j'aimerais bien qu'il soit impossible de mettre des caractéres alphanumériques dans le fichier texte, or le probléme c'est qu'à chaque fois que j'en met un, bah il met un 0 a la place.
    J'ai fais ce petit bout de code mais il ne marche pas

    Voici mon code que j'ai inséré au début de mon while:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     
    for (i=0; i<size; i++){
         if((buffer[i]>='A') && (buffer[i]<='Z')|| (buffer[i]>='a') &&(buffer[i]<='z')){ 
    	 printf("Structure du fichier incorrecte");
    	 exit(1);
         }
         buffer++;
    }

    merci de vos réponses

    Flo62

  4. #4
    Membre habitué Avatar de archer
    Ingénieur développement logiciels
    Inscrit en
    Mai 2007
    Messages
    338
    Détails du profil
    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Mai 2007
    Messages : 338
    Points : 180
    Points
    180
    Par défaut
    salut
    utilisez isdigit(char c) elle retourne 0 si c'est c'est un caractère et !=0 sinon
    en fait c'est un prototype de ctype.h

Discussions similaires

  1. Réponses: 2
    Dernier message: 29/07/2010, 21h58
  2. Réponses: 26
    Dernier message: 20/06/2010, 18h24
  3. sauvegarder un vecteur dans un fichiers texte
    Par kheira dans le forum MATLAB
    Réponses: 5
    Dernier message: 09/03/2010, 16h46
  4. Remplir une matrice à partir d'un vecteur
    Par amarion dans le forum MATLAB
    Réponses: 2
    Dernier message: 10/03/2008, 12h17
  5. Créer une matrice en manipulant un vecteur
    Par bernard6 dans le forum MATLAB
    Réponses: 3
    Dernier message: 07/04/2007, 11h34

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