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 :

Organiser les données d'un fichier


Sujet :

C

  1. #1
    Membre régulier
    Inscrit en
    Août 2004
    Messages
    201
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 201
    Points : 83
    Points
    83
    Par défaut Organiser les données d'un fichier
    Bonjour,

    je possède un fichier "input.dat" qui contient une liste joueurs, chaque ligne représente les données d'un joueur (nom, prénom, équipe, numéro, score, matchs).

    Je voudrais grâce a un programme, lire ce fichier et l'organiser pour en faire deux nouveaux fichiers (gauche.dat, droite.dat). Je voudrais diviser la liste du fichier input.dat de telle manière à ce que le premier est stocké dans le fichier gauche.dat et le suivant dans droite.dat...

    input.dat
    Doe John Knicks 39 150 8
    Ford Ricky Nets 12 155 8
    Freeman Gordon Bears 14 170 9
    Hall Jeff Rockets 23 162 9
    Helmer Brett Nicks 33 153 9
    Roy Howerton Clippers 41 149 8
    Joerling Todd Lackers 11 156 7
    Kendrick Jason Bucks 19 155 7
    Rodderick Andy Charlotte 26 159 8
    ce que devrait etre gauche.dat
    1# Doe John Knicks 39 150 8
    2# Freeman Gordon Bears 14 170 9
    3# Helmer Brett Nicks 33 153 9
    4# Joerling Todd Lackers 11 156 7
    5# Rodderick Andy Charlotte 26 159 8
    ce que devrait etre droite.dat
    1# Ford Ricky Nets 12 155 8
    2# Hall Jeff Rockets 23 162 9
    3# Roy Howerton Clippers 41 149 8
    4# Kendrick Jason Bucks 19 155 7

    Voila le debut de mon code, qui ne fait pour l'instant que lire:

    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
     
    #include <stdio.h>
    #include <stdlib.h>
     
    # define   FILENAME   "input.dat"
     
    int main ( void )
    {
     
      char fname;
     
      FILE * fp;
      char buffer [ 81 ];
     
      printf("Enter the filename : ");
      scanf("%s", fname);
     
      if( fname = FILENAME)
     {
      if ( ( fp = fopen ( FILENAME, "r" ) ) == NULL ) {
        fprintf ( stderr, "fileloop1: Unable to open %s!\n", FILENAME );
        exit ( 1 );
        }
     
      fgets ( buffer, 81, fp );
      while ( ! feof ( fp ) ) {
        fputs ( buffer, stdout );
        fgets ( buffer, 81, fp );
        }
     
      fclose ( fp );
      }
     
     else
            printf("Unable to open file %s", fname);
      return 0;
    }
    Des idées sur comment procéder ?

    Merci

  2. #2
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par virtuadrack
    Je voudrais grâce a un programme, lire ce fichier et l'organiser pour en faire deux nouveaux fichiers (gauche.dat, droite.dat). Je voudrais diviser la liste du fichier input.dat de telle manière à ce que le premier est stocké dans le fichier gauche.dat et le suivant dans droite.dat...

    Des idées sur comment procéder ?
    Ouvrir 2 fichiers en écriture et écrire ce qu'on a lu alternativement dans l'un ou l'autre... Je ne vois pas trop où est le problème.

    Par contre, ton code est horrible :
    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
     
    Project   : Forums
    Compiler  : GNU GCC Compiler (called directly)
    Directory : C:\dev\forums\
    --------------------------------------------------------------------------------
    Switching to target: default
    Compiling: main.c
    main.c: In function `main':
    main.c:16: warning: format argument is not a pointer (arg 2)
    main.c:18: warning: assignment makes integer from pointer without a cast
    main.c:18: warning: suggest parentheses around assignment used as truth value
    main.c:35: warning: format argument is not a pointer (arg 2)
    main.c:10: warning: 'fname' might be used uninitialized in this function
    Linking console executable: console.exe
    Process terminated with status 0 (0 minutes, 2 seconds)
    0 errors, 5 warnings
    Si ton compilateur ne dit rien, il est probablement mal réglé :

    http://emmanuel-delahaye.developpez....tm#cfg_compilo

    Pour gérer correctement les fichiers et les saisies :

    http://emmanuel-delahaye.developpez....tes.htm#saisie
    http://emmanuel-delahaye.developpez....s.htm#fichiers

    Tout lire, y compris les liens...
    Pas de Wi-Fi à la maison : CPL

  3. #3
    Membre régulier
    Inscrit en
    Août 2004
    Messages
    201
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 201
    Points : 83
    Points
    83
    Par défaut
    Ca marche l'ami merci pour ta repondse, je vais etudier la chose si j'ai des questions je poste ici

  4. #4
    Membre régulier
    Inscrit en
    Août 2004
    Messages
    201
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 201
    Points : 83
    Points
    83
    Par défaut
    Merci pour les liens


    Jusqu'a present j'arrive a lire le fichier input.dat en entier et le programme arrive a afficher le contenu sans problemes.

    Maintenant j'essaye de creer un fichier east.dat et y mettre ce que le programme a lu comme ligne


    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
     
    #include <stdio.h>
    #include <stdlib.h>
     
    # define   FILENAME   "input.dat"
     
    int main ( void )
    {
     
      char fname;
     
      FILE * fp, * outptr;
      char buffer [ 81 ];
      int counter =0 ;
     
     
      if ( ( fp = fopen ( FILENAME, "r" ) ) == NULL ) {
        fprintf ( stderr, "fileloop1: Unable to open %s!\n", FILENAME );
        exit ( 1 );
        }
      fgets (buffer, 81, fp);
      while ( ! feof ( fp ) ) {
        fputs ( buffer, stdout ); // afficher
        fgets ( buffer, 81, fp ); // la totale
    }
        if(feof(fp)){ // quand le prog affiche tout contenu, creer un nouveau fichier
         outptr = fopen ("east.dat","w");
         fprintf(outptr, "%d: %s\n", counter++, buffer);  //c'est ici ou il y a un probleme, l'output n'est pas bon
         }
     
    fclose(fp);
     
            return 0;
    }
    Je ne sais pas comment ecrire les lignes du fichier input.dat dans le fichier east.dat

    fprintf(outptr, "%d: %s\n", counter++, buffer);

  5. #5
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par virtuadrack
    Merci pour les liens
    Tu aurais mieux fait de les lire à fond et de poser des question si tu ne comprends pas...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
      fgets (buffer, 81, fp);
      while ( ! feof ( fp ) ) {
        fputs ( buffer, stdout ); // afficher
        fgets ( buffer, 81, fp ); // la totale
    }
    Stop.

    La façon canonique de lire un fichier texte est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
      char line[BIG_ENOUGH];
     
       while (fgets(line, sizeof line, fp) != NULL)
       {
           /* traitements */
       }
    tu n'as pas à utiliser feof(), qui ne fait pas ce que tu crois.

    Pour écrire une ligne dans un fichier, tu peux utiliser fgets() si elle est inchangée. Si tu dois la modifier ou ajouter quelque chose, fprintf() peut aider...
    Pas de Wi-Fi à la maison : CPL

  6. #6
    Membre régulier
    Inscrit en
    Août 2004
    Messages
    201
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 201
    Points : 83
    Points
    83
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    while ( fgets( buffer, sizeof buffer, fp ) != NULL ) fputs( buffer, stdout );  {
        outptr = fopen ("east.dat","w");
        fprintf(outptr, "%s", buffer);
        }
    a ce que j'ai compris de la logique de ce bout de code que je viens de tester et qui ne fait pas ce que je veux : Quand la lecture du fichier n'est pas terminee et l'ecran affiche le contenu du fichier > ouvrir un nouveau fichier nomee east.dat en ecriture et y ecrire les lignes du fichier principale...

    J'aimerais bien savoir ou je me trompe dans la partie traitement dans la while loop, car le fichier east.dat est vide a chaque execution de code. Pourquoi rien n'est ecris ?

  7. #7
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par virtuadrack
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    while ( fgets( buffer, sizeof buffer, fp ) != NULL ) fputs( buffer, stdout );  {
        outptr = fopen ("east.dat","w");
        fprintf(outptr, "%s", buffer);
        }
    Ce code n'a aucun sens et il est indenté de manière trompeuse. Il fat absolument être rigoureux dans le codage, y compris dans la manière de présenter le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    /* boucle de lecture avec affichage */
    while (fgets (buffer, sizeof buffer, fp ) != NULL ) 
       fputs( buffer, stdout );  
     
    /* bloc (inutile) qui ouvre le fichier et ecrit la dernière ligne lue dedans */
    {
        outptr = fopen ("east.dat","w");
        fprintf(outptr, "%s", buffer);
    }
    Avant de coder la moindre ligne, il faut commencer par écrire l'algorithme. Ca peut se faire en plusieurs étapes. La première est d'écrire très précisément, dans le bon ordre et en phrases simples et claires, le comportement attendu du programme :

    Ca pourrait commencer comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    ouvrir le fichier original en lecture
    ouvrir les 2 fichiers en écriture
    lire le fichier original ligne à lignes
    Pour chaque ligne : 
     ...
     etc.
    fermer les 3 fichiers.
    Je te laisse compléter.
    Pas de Wi-Fi à la maison : CPL

  8. #8
    Membre régulier
    Inscrit en
    Août 2004
    Messages
    201
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 201
    Points : 83
    Points
    83
    Par défaut
    Avancement du programme:

    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
     
      FILE * fp, * outptr, * outptr2;
      char buffer [ 81 ];
    int i;
       outptr = fopen ("east.dat","w"); // ouvrir le 1er fichier en ecriture
       outptr2 = fopen ("west.dat","w"); // ouvrir le 2eme
     
      if ( ( fp = fopen ( FILENAME, "r" ) ) == NULL ) {
        fprintf ( stderr, "fileloop1: Unable to open %s!\n", FILENAME );
        exit ( 1 );
        }
     
       if ( ( outptr = fopen ("east.dat","w") ) == NULL ) {
         fputs("Unable to open east.dat",stderr);
         fclose(outptr) ;
    }
     
        /* Lire le fichier original ligne par ligne */
     
        while ( fgets( buffer, sizeof buffer, fp ) != NULL ) {
          fputs( buffer, stdout );
        }
     
        /* pour chaque ligne du fichier, lire et afficher */
        for(i=1; i<=10; i=i+2)
         {          
              fgets(buffer, 81, fp);
              fprintf(outptr, "%d: %s", i, buffer);
         }  
     
        for(i=0; i<=10; i=i+2)
         {          
              fgets(buffer, 81, fp);
              fprintf(outptr2, "%d: %s", i, buffer);
         }  
     
       /* fermer les 2 fichier */
       fclose(fp);
       fclose(outptr);
       flclose(outptr2);


    Output du fichier
    1:
    3:
    5:
    7:
    9:
    comment ca se fait que la for loop n'imprime pas ce qui a ete lu auparavant ?

  9. #9
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par virtuadrack
    Avancement du programme:
    Quels sont les mots que tu ne comprends pas dans :

    "Avant de coder la moindre ligne, il faut commencer par écrire l'algorithme."

    Tu veux faire ton rebelle ? Tu te prends pour un génie, genre "je code directement, pas besoin de réfléchir avant" ... ?

    Si tu ne tiens pas compte des conseils donnés, pas la peine de demander de l'aide.
    Pas de Wi-Fi à la maison : CPL

  10. #10
    Membre régulier
    Inscrit en
    Août 2004
    Messages
    201
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 201
    Points : 83
    Points
    83
    Par défaut
    J'ai pris en compte de faire un logarithme avant de modifier mon code. Voila

    ouvrir le fichier original en lecture

    ouvrir les 2 fichiers en écriture

    Si les fichiers ne s'ouvrent pas
    imprimer erreur

    lire le fichier original ligne par lignes

    Pour chaque ligne du fichier 1:

    remplacer les minuscules par des majs

    ligne i
    imprimer sur le fichier
    retour a la ligne

    Pour chaque ligne du fichier 2:

    remplacer les minuscules par des majs

    ligne i
    imprimer sur le fichier 2
    retour a la ligne

    fermer les 3 fichiers.

  11. #11
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par virtuadrack
    J'ai pris en compte de faire un logarithme avant de modifier mon code. Voila
    Un quoi ?

    http://emmanuel-delahaye.developpez.com/notes.htm#algo

    Alors tu penses que ton algorithme répond à cette demande :

    http://www.developpez.net/forums/sho...83&postcount=1
    ?

    Je rappelle la spécification :

    Citation Envoyé par specs
    je possède un fichier "input.dat" qui contient une liste joueurs, chaque ligne représente les données d'un joueur (nom, prénom, équipe, numéro, score, matchs).

    Je voudrais grâce a un programme, lire ce fichier et l'organiser pour en faire deux nouveaux fichiers (gauche.dat, droite.dat). Je voudrais diviser la liste du fichier input.dat de telle manière à ce que le premier est stocké dans le fichier gauche.dat et le suivant dans droite.dat...
    Dans un algorithme fonctionnel, on ne met pas la gestion d'erreur. On est chez les Bisounours, tout marche bien.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    ouvrir le fichier original en lecture
    ouvrir les 2 fichiers en écriture
    lire le fichier original ligne par lignes
    Pour chaque ligne du fichier 1 : // qui n'existe pas encore ?
     remplacer les minuscules par des majs // c'est demandé ça ?
     
    ligne i // C'est une action ? Où est le verbe d'action ?
    imprimer sur le fichier // on dit 'ecrire'... mais quoi ?
    retour a la ligne
    C'est horriblement pas clair. Tu ne sais pas faire une descritpion de comportement ?

    Par exemple :

    "écrire dans le fichier 1 le numéro de ligne suivie de la ligne originale."
    "incrémenter le numéro de ligne du fichier 1"

    Nota : la fin de ligne est déjà dans la ligne originale.

    Refais moi tout ça de façon simple et logique.

    Il y a une lecture de ligne qui se traduit par l'écriture alternativement dans un fichier puis dans l'autre à la ligne suivante... J'en ai trop dit...

    Il suffit de lire la spec... Si elle n'est pas claire, il faut la reformuler...
    Pas de Wi-Fi à la maison : CPL

  12. #12
    Membre régulier
    Inscrit en
    Août 2004
    Messages
    201
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 201
    Points : 83
    Points
    83
    Par défaut
    Bon dimanche.

    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
     
    Accepter une entrée d un nom du fichier a ouvrir de la part de l utilisateur
     
    Si le fichier correspond au fichier déclaré:
     
      ouvrir le fichier original en lecture
      ouvrir les 2 fichiers en écriture
      lire le fichier original ligne par ligne
      Afficher ce qui a été lu sur l écran  
     
      Pour chaque ligne du fichier original :
       remplacer les minuscules par des majs // oui je souhaite le faire
       écrire sur le fichier 1 la première ligne du fichier original
       incrémenter le numéro de ligne du fichier 1 
       terminer l écriture du fichier 1
     
       écrire sur le fichier 2 la seconde ligne du fichier original
       incrémenter de deux le numéro de ligne du fichier 2 
       terminer l écriture
     
    // puisque tout marche bien dans un algorithme, je ne met pas d else 
     
    Fermer le fichier 1
    Fermer le fichier 2
    Fermer le fichier original
    Est ce que c'est amélioré ?

    Merci de ton aide.

  13. #13
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par virtuadrack
    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
     
    Accepter une entrée d un nom du fichier a ouvrir de la part de l utilisateur
     
    Si le fichier correspond au fichier déclaré:
     
      ouvrir le fichier original en lecture
      ouvrir les 2 fichiers en écriture
      lire le fichier original ligne par ligne
      Afficher ce qui a été lu sur l écran  // debug seulement...
     
      Pour chaque ligne du fichier original :
       remplacer les minuscules par des majs
       écrire sur le fichier 1 la première ligne du fichier original
       incrémenter le numéro de ligne du fichier 1 
       terminer l écriture du fichier 1
     
       écrire sur le fichier 2 la seconde ligne du fichier original
       incrémenter de deux le numéro de ligne du fichier 2 
       terminer l écriture
     
    // puisque tout marche bien dans un algorithme, je ne met pas d else 
     
    Fermer le fichier 1
    Fermer le fichier 2
    Fermer le fichier original
    Est ce que c'est amélioré ?
    C'est un peu mieux, mais comme c'est la lecture qui commande, il faut un mécanisme simple qui détermine si la ligne lue va dans l'un ou l'autre fichier. Il faut bel et bien une variable d'état binaire (0/1) et un si-sinon qui envoie la ligne tantôt dans un fichier, tantôt dans l'autre.

    Je ne comprends pas que tu ais autant de mal avec ce simple mécanisme, surtout qu'il est au coeur même de ta demande...
    Pas de Wi-Fi à la maison : CPL

  14. #14
    Membre régulier
    Inscrit en
    Août 2004
    Messages
    201
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 201
    Points : 83
    Points
    83
    Par défaut
    Ce n'est pas le mecanisme avec lequel j'ai eu un probleme, c'est le fait d'ecrire une ligne particuliere dans l'un des nouveaux fichier.

    Quand j'utilise
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fprintf(outptr,"%s",buffer);
    Je sens que c'est pas la bonne fonction parce que ca n'a jamais marche la plupart du temps, c'est pour ca que j'ai voulu savoir qu'est ce qui n'allait pas dans mon code. Maintenant si c'est l'algo je devais faire, je comprend un peu mieux...
    Est ce que je peux coder maintenant ?
    Que recommandes-tu que j'evite (d'apres ce que tu as remaque dans mon premier code) ? Est ce que la fprintf est bonne ?

  15. #15
    Membre régulier
    Inscrit en
    Août 2004
    Messages
    201
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 201
    Points : 83
    Points
    83
    Par défaut
    J'ai commence pour refaire le code par ca:

    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
     
    #include <stdio.h>
    #include <stdlib.h>
    # define   FILENAME   "input.dat"
     
    int main ( void )
    {
      char fname;
      FILE * fp;
     
      printf("Enter file name: ");
      scanf("%s", &fname);
     
      if (fname == FILENAME) // ligne 14
      {
            printf("success");
            /* executer le code */
      }
     
    else 
    { 
           printf("erreur d'ouverture"); 
    }
     
        return 0;
    }
    j'ai un warning.

    lab88.c: In function `main':
    lab88.c:14: warning: comparison between pointer and integer

    Je ne comprend pas pourquoi il sort un integer alors que fname est declare en char ?

    J'ai deja essaye if (fname == "input.dat") meme erreure.

  16. #16
    Membre actif
    Avatar de odsen.s
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2006
    Messages
    269
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2006
    Messages : 269
    Points : 243
    Points
    243
    Par défaut
    Je ne comprend pas pourquoi il sort un integer alors que fname est declare en char ?

    J'ai deja essaye if (fname == "input.dat") meme erreure.
    On ne peut pas comparer directement deux chaînes de caractères en C.
    Tu peux utiliser strcmp() de <string.h>.

    De plus, ta variable fname déclarée en tant que char ne pourra contenir qu'un seul caractère.
    Il faut déclarer un tableau de char.

    (si comparer deux chaînes de caractères est bien ici ce que tu veux faire)

  17. #17
    Membre régulier
    Inscrit en
    Août 2004
    Messages
    201
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 201
    Points : 83
    Points
    83
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    char fname[21];
     
    if (strcmp ( fname, "input.dat" ))
      printf("success");}
      else
           printf("erreur d'ouverture");
    Quand je met n'importe quel input le resultat est "succes". Alors que if (strcmp ( fname, "input.dat" )) n'est vrai que quand fname est "input.dat"

  18. #18
    Membre régulier
    Inscrit en
    Avril 2007
    Messages
    82
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 82
    Points : 72
    Points
    72
    Par défaut
    Citation Envoyé par virtuadrack
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    char fname[21];
     
    if (strcmp ( fname, "input.dat" ))
      printf("success");}
      else
           printf("erreur d'ouverture");
    Quand je met n'importe quel input le resultat est "succes". Alors que if (strcmp ( fname, "input.dat" )) n'est vrai que quand fname est "input.dat"
    Bonsoir, Strcmp renvoit 0 si les 2 chaines sont égales.

  19. #19
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par virtuadrack
    Est ce que je peux coder maintenant ?
    Si l'algo est correct, oui.
    Que recommandes-tu que j'evite (d'apres ce que tu as remaque dans mon premier code) ? Est ce que la fprintf est bonne ?
    Déjà répondu :

    http://www.developpez.net/forums/sho...84&postcount=5
    Pas de Wi-Fi à la maison : CPL

  20. #20
    Membre régulier
    Inscrit en
    Août 2004
    Messages
    201
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 201
    Points : 83
    Points
    83
    Par défaut
    Citation Envoyé par Emmanuel Delahaye
    il faut un mécanisme simple qui détermine si la ligne lue va dans l'un ou l'autre fichier. Il faut bel et bien une variable d'état binaire (0/1) et un si-sinon qui envoie la ligne tantôt dans un fichier, tantôt dans l'autre.
    Voila un peu a quoi ressemble mon code maintenant

    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
     
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    # define   FILENAME   "input.dat"
     
     
    int main ( void )
    {
    char fname [21];
    char buffer [81];
    int i;
     
    FILE * fp, * inptr, * inptr2;
     
    printf("Enter file name: ");
    scanf("%s", &fname);
     
    if (strcmp ( fname, FILENAME ))
    {
            printf("Unable to open file specified!\n");}
     
            else
            {
             fp = fopen ( FILENAME, "r" );
             inptr = fopen ( "east.dat", "w");
             inptr2 = fopen ( "west.dat", "w");
     
             while ( fgets( buffer, sizeof buffer, fp ) != NULL )
             {
              fputs( buffer, stdout );
     
             for(i=0; i<=5;i++)
              {
               fprintf(inptr, "%d: %s", i, buffer);
              }
            }
    }
       fclose(fp);
       fclose(inptr);
       fclose(inptr2);
     
       return 0;
    }
    Deja il y a un output dans east.dat, mais c'est a l'interieur de la for loop que ca foire , je crois que pour regler le probleme je devrais mettre le mecanisme que tu dis a l'interieur de la for loop.

    je sais qu'il faut mettre un if-else dans la for loop mais comment designer au programme la ligne 1, la ligne 3 et la ligne 5? Car je ne sais pas trop quoi inclure comme condition dans le if.

    J'ai du mal a traduire ce mecanisme en code. Je n'ai pas saisi le fait d'utiliser une variable binaire. Pourrais-tu etre plus precis.

    Merci de ton aide.

Discussions similaires

  1. [MySQL] Importer les données d'un fichier CSV dans une base de données
    Par joueur dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 12/11/2008, 11h59
  2. Sauvegarder les données dans un fichier CSV
    Par beb30 dans le forum MFC
    Réponses: 5
    Dernier message: 08/03/2006, 13h06
  3. [VB 6.3] Traiter les données d'un fichier
    Par yaya54 dans le forum VB 6 et antérieur
    Réponses: 9
    Dernier message: 21/02/2006, 14h00
  4. [](VB) Récupérer les données dans un fichier .xml
    Par Furius dans le forum VBScript
    Réponses: 4
    Dernier message: 02/10/2005, 20h39
  5. [JTable] Comment récuperer les données d'un fichier texte ?
    Par Makunouchi dans le forum Composants
    Réponses: 2
    Dernier message: 03/05/2005, 16h37

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