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 :

read file fscanf


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    100
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 100
    Par défaut read file fscanf
    Salut;
    ce code permet de lire une fichier qui contient des entiers mais quand je change le type, ç-v-dire lire une fichier qui contient des entiers et des caractères le code ne marche pas , vous pouvez me dire ce que je dois changer, dans ce code, merci.
    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
    int main() {
      FILE *file;
      int * numbers;
      numbers = (int *)malloc(512 * sizeof(int));
      if (numbers == NULL)
        {
            printf("Allocation echoue \n");
        }
      int i,j;
     
      file = fopen("fichier.txt", "r");
     
      if(file==NULL) {
        printf("Error: Canot open file .\n");
        return 1;
      }
      else {
        printf("File opened successfully.\n");
        i = 0 ;    
        while(!feof(file)) { 
          fscanf(file, "%d", &numbers[i]);
          i++;
        }
        printf("Number of numbers read: %d\n\n", i);
        printf("The numbers are:\n");
     
        for(j=1 ; j<i ; j++) { 
          printf("%d",numbers[j]);
        }
     
        fclose(file);
        free(numbers);
        return 0;
      }
    }

  2. #2
    Membre averti
    Inscrit en
    Juin 2009
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 28
    Par défaut fscanf
    ce que tu dois faire c'est de publier l'autre source, comme ca j'aurai une idee de ce qui a ete mal fait.
    Et j'ai remarque que ta variable numbers[i] n'attendent que des int, alors il faudra les lire caractere par caractere pour dire si c'est int ou si c'est char ou tu peux ajouter une autre ligne printf comme le suivant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    printf("%c", numbers[i]);
    de toute facon envoie ton autre source pour que je sois plus clair

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    100
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 100
    Par défaut
    merci bcp;
    je ne sais pas, vous parlez de quel code source, si vous compilez ce code en ajoutant les includes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    #include<stdio.h>
    #include<stdlib.h>
    et vous crée une fichier dont le nom est fichier.txt et qui contient :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    12 2 3 1 2 1 3 0
    45 5 6 7 6 7 8
    45 65 67 565 676
    vous allez voir que le code marche très bien.
    En effet, ce que je veux, c'est que ce code traite même les caractères dans une fichier qui contient :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    P4 23
    #bla bla bla
    #bla mahin machin
    45 65 67 8787 89
    c'est tous ce que je veux pour le moment. Merci.

  4. #4
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 119
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 119
    Billets dans le blog
    148
    Par défaut
    Bonjour,

    Quel est le problème, j'ai regardé deux fois le code, et je ne comprend pas pourquoi ça ne marche pas. ( Il faudrait que le teste )

    Que vous affiche la programme, après lecture du fichier?

    Sinon, ce que vous pouvez faire aussi, c'est de lire ligne par ligne et d'analyser la ligne, par l'intermédiaire d'un buffer.
    La fonction fgets pour lire la ligne, la fonction sscanf pour traiter le buffer.
    Pour éviter les '#' qui montre que ce sont des commentaires, vous pouvez faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    fgets(ligne); // Ce n'est pas correct, mais c'est pour donner l'idée
    if ( ligne[0] == '#' )
    {
     // Ici nous avons un commentaire
    }
    else
    {
     // Nous devons lire les nombres
    }
    @sambalien: La fait de faire un fscanf(fichier, "%d",&variable); va eviter de lire le texte ( car ne correspondant pas au format ).
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    100
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 100
    Par défaut
    Alors au début merci pour vos réponse;
    ce que j'ai fais, a partir de ce que vous m'avez proposé c'est que j'ai remplacé cette partie :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     while(!feof(file)) { 
          fscanf(file, "%d", &numbers[i]);
          i++;
        }
    Par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     while(!feof(file)) { 
          fgets(numbers, 512, file);
          i++;
          if(numbers[0] == '#')
    	{Action};
        }
    mais le résultat c'est que je reçois juste une partie du fichier a traité (les deux chiffres de la première ligne) .
    y a t il une erreur d'utilisation du fgets.

  6. #6
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 119
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 119
    Billets dans le blog
    148
    Par défaut
    Je vous conseille de lire la page de manuel du fscanf, il va falloir verifier les valeurs returnee par la fonction pour savoir ce qu'elle lit.


    Je viens de me rendre compte, que mon idee de ce matin etait vraiment idiote.
    Il faut mieux utilise directement fscanf.
    Mais je ne sais pas pourquoi il ne lit pas correctement.
    Par contre, en correction de votre premier code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    while(!feof(file)) 
    { 
          int nombreLu = 0;
     
          nombreLu = fscanf(file, "%d", &numbers[i]);
     
          if ( nombreLu == 1 ) // Nous avencons dans notre tableau, que si nous avons effectivement lu un nombre
                i++;
    }
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

Discussions similaires

  1. Réponses: 3
    Dernier message: 11/04/2008, 16h27
  2. Bad file descriptor avec un read()
    Par je®ome dans le forum C
    Réponses: 2
    Dernier message: 04/04/2006, 19h30
  3. [JSP/Websphere] File write / FTP / File read
    Par benben13 dans le forum Websphere
    Réponses: 34
    Dernier message: 18/08/2005, 16h18
  4. [File][byte][read]
    Par fabszn dans le forum Entrée/Sortie
    Réponses: 4
    Dernier message: 27/10/2004, 14h05

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