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'un fichier


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Inscrit en
    Juin 2007
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 8
    Par défaut Lecture d'un fichier
    Bonjour, tout d'abord merci de m'avoir aider pour le precedent message. J'ai finalement reussi a resoudre mon probleme.

    Mais j'en ai un second.
    J'ai un fichier, nommé "save", qui contient plusieurs donnée sur mon programme.

    J'essaye de recuperer les informations d'une ligne construite ainsi.
    <angle des elements> < position x des elements > <position y des elements>

    Donc, si j'ai 4 elements, j'aurai les 4 premieres valeurs flottantes qui correspondent aux angles respectifs des elements, puis les 4 abscisses respectives des elements,...

    Je souhaite recuperer le premier angle pour l'associer au 1er x et au 1er y, puis le second angle avec la 2nde abscisse et la 2nde ordonnée,...
    Pour finalement creer les elements qui sont des structures avec les champs precedents.

    Mais je n'y arrive pas. De plus le nombre d'element enregistrer dans le fichier est variable, je peux tres bien avoir les informations sur 34 elements comme sur aucun, tout depend a quel moment le fichier a été enregistrer au cours du jeu.

    Sauriez-vous comment s'y prendre ?

  2. #2
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par Novocaine
    Sauriez-vous comment s'y prendre ?

    Bien sûr ...

    Bon plus sérieusement, faudrait que tu postes ton code .. Vu comme ça il y a plusieurs manières de faire. Laquelle as-tu choisie ??

  3. #3
    Membre du Club
    Inscrit en
    Juin 2007
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 8
    Par défaut
    Ouaip, desolé, j'ai pas le reflexe:

    fichier.c:
    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
    FILE *fentree;
    char chaine[100];
    int compteur;
     
    //ptre_nb_projectile_robot est un argument de la fonction fichier_load()
     
     
    fentree = fopen("save", "r");
    [...]
    for(compteur = 1; compteur != *ptre_nb_projectile_robot; compteur++)
      {
        sscanf(chaine,"%f ", &tab_delta_phi_robot[compteur - 1]);
        printf("delta_phi: %f\n", tab_delta_phi_robot[compteur - 1]);
      }
     
    fclose(fentree);
    save:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    0 0 0 3151
    0.05 0 4.00 4.00 3.00 0.00 777 777 2322 1 0.00
    5 
    0.85 0.57 0.15 -0.58 1.49 -14.74 -14.16 -8.29 0.20 -1.88 20.43 31.72 59.06 59.18 10.14 0.20 0.30 
    ...
    0 2 777
    777 2.00 0.10 
    ...
    0 
    0.20 0.30
    ...
    Donc pour expliciter le "code" du save. Mon probleme se situe a la ligne 4. Ici j'ai 5 element (comme indiqué en ligne 3), donc les 5 premiers sont les angles, les 5 suivants les abscisses, les 5 autres les ordonnées, et les 2 dernieres correspondent a leur vitesse qui est commune et leur rayon pour les dessiner.

    Bien entendu, ma boucle for est fausse, elle va toujours me donner la premiere valeur des angles.

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    131
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 131
    Par défaut
    Soit N le nombre d elements.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    1- ouvre le fichier en lecture (fopen)
    2- tu lis la ligne (fgets) ou se trouve N.
    3- tu lis la ligne (fgets) ou se trouvent les informations (angles etc.)
        il y aura N * 3 + 2 sous chaine de caractere a recuperer.
    4- tu extrais les N * 3 + 2 sous chaines de characteres en sachant qu ils 
        sont separes par des espaces.
    5- convertir les char * en double avec atod

    tu peux, antre autre, creer une structure ou tu stockeras les valeurs trouvees.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    typedef struct element {
        double angle;
        double posx;
        double posy;
        double rayon;
        double vitesse;
    } element_t;

  5. #5
    Membre du Club
    Inscrit en
    Juin 2007
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 8
    Par défaut
    J'ai fait ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    fgets(chaine, 100, fentree);
    char* tab_champ_pjte_robot[ *ptre_nb_pjte_robot];
     
    for(compteur = 0; compteur != *ptre_nb_pjte_robot; compteur++)
    {
      tab_champ_pjte_robot[compteur] = strtok(chaine, " ");
      printf("toto: %s\n", tab_champ_pjte_robot[compteur]);  
    }
    Mais il renvoye toujours la premiere valeur.
    J'ai pas trouvé comment faire pour recuperer le premier token, puis le second, puis le....

  6. #6
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut


    man strtok...

    La première fois qu'il est appelé, strtok prend la chaîne. A partir de la 2ième fois il faut lui passer NULL...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Lecture d'un fichier .dbf
    Par San Soussy dans le forum Autres SGBD
    Réponses: 8
    Dernier message: 07/07/2004, 16h30
  2. Réponses: 6
    Dernier message: 02/09/2003, 15h12
  3. Lecture et ecriture fichier .ini
    Par despe dans le forum C
    Réponses: 6
    Dernier message: 23/07/2003, 20h40
  4. [langage] Optimiser la lecture d'un fichier
    Par And_the_problem_is dans le forum Langage
    Réponses: 4
    Dernier message: 05/02/2003, 08h54
  5. [langage] Optimiser la lecture d'un fichier
    Par And_the_problem_is dans le forum Langage
    Réponses: 2
    Dernier message: 11/06/2002, 10h24

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