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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Août 2004
    Messages
    201
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 201
    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
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    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...

  3. #3
    Membre confirmé
    Inscrit en
    Août 2004
    Messages
    201
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 201
    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 confirmé
    Inscrit en
    Août 2004
    Messages
    201
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 201
    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
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    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...

  6. #6
    Membre confirmé
    Inscrit en
    Août 2004
    Messages
    201
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 201
    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
    Membre confirmé
    Inscrit en
    Août 2004
    Messages
    201
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 201
    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.

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

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2006
    Messages : 269
    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)

  9. #9
    Membre confirmé
    Inscrit en
    Août 2004
    Messages
    201
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 201
    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"

  10. #10
    Membre confirmé
    Inscrit en
    Avril 2007
    Messages
    82
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 82
    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.

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