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 :

lire seconde ligne d'un fichier avec fgets


Sujet :

C

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 6
    Par défaut lire seconde ligne d'un fichier avec fgets
    Bonsoir,

    Je suis en train de me faire un petit jeu en c avec SDL comportant differents niveaux. J'ai mis chaque niveau par ligne (ACSII) dans un fichier que j'ai nommé niveaux.lvl.

    Mon soucis est que je ne sais pas comment faire pour lire la deuxieme ligne du fichier niveaux.lvl afin de commencer au niveau 2 et non par le niveau 1.

    Pour charger un niveau je fais
    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
    int chargerNiveau(int niveau[][NB_BLOC_HAUTEUR])
    {
        FILE* fichier = NULL;
        char ligneFichier[NB_BLOC_LARGEUR * NB_BLOC_HAUTEUR + 1] = {0};
        int i = 0, j = 0;
     
        fichier = fopen("/media/MacOs/prog/c/Marion Sokoban/niveaux.lvl", "r");
        if (fichier == NULL)
            return 0;
     
        //ON lit la ligne de niveau.lvl
        fgets(ligneFichier, NB_BLOC_LARGEUR * NB_BLOC_HAUTEUR + 1, fichier);
     
        for(i=0; i<NB_BLOC_LARGEUR; i++)
        {
            for(j=0; j < NB_BLOC_HAUTEUR; j++)
            {
                switch (ligneFichier[(i * NB_BLOC_LARGEUR) + j])
                {
                    case '0':
                        niveau[j][i] = 0;
                        break;
                    case '1':
                        niveau[j][i] = 1;
                        break;
                    case '2':
                        niveau[j][i] = 2;
                        break;
                    case '3':
                        niveau[j][i] = 3;
                        break;
                    case '4':
                        niveau[j][i] = 4;
                        break;
                }
            }
        }
        fclose(fichier);
        return 1;
    }
    J'espere me faire comprendre.
    En vous remerciant d'avance

  2. #2
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    Mon soucis est que je ne sais pas comment faire pour lire la deuxieme ligne du fichier niveaux.lvl afin de commencer au niveau 2 et non par le niveau 1.
    Si tu veux aller directement au niveau N, tu boucles N fois sur le fgets(). En sortie de la boucle, tu as la ligne de ton fichier qu'il te faut.
    Naturellement, il faut passer en paramètre de la fonction le niveau à atteindre.

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 6
    Par défaut
    Ok je te remercie.

    Ce que je dois faire donc c'est une boucle disant que tant que je n'atteint pas le niveau voulu ca fait rien?
    Mais en fait ce que je ne comprend vraiment pas c'est comment indiquer que je veux aller à la ligne 2 ou 3 ou 4*? Où je l'indique ca?
    Désolé si mes questions paraissent stupide

    Merci encore

  4. #4
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 453
    Par défaut
    Citation Envoyé par key94 Voir le message
    Ce que je dois faire donc c'est une boucle disant que tant que je n'atteint pas le niveau voulu ca fait rien? Mais en fait ce que je ne comprend vraiment pas c'est comment indiquer que je veux aller à la ligne 2 ou 3 ou 4*? Où je l'indique ca? Désolé si mes questions paraissent stupide
    C'est le problème : tu ne peux pas le faire (avec fgets()). Et cela pour deux raisons :

    D'abord, tu ne connais pas a priori la taille de tes lignes et donc tu ne peux pas calculer à l'avance la position dans un fichier de la ligne qui t'intéresse. Tu es donc condamné à le parcourir depuis le début jusqu'à ce que tu aies rencontré suffisamment de retours à la ligne.

    La seconde, c'est que ton fichier n'est pas forcément à accès aléatoire. Si tu lis un fichier sur disque ou sur un lecteur de bande suffisamment évolué, tu peux faire un fseek() pour te repositionner. Mais si tu lis un banal lecteur de cassette ou (plus probablement aujourd'hui) si tes données proviennent d'un port série, d'un modem, d'un autre programme (pipe), ou si c'est tout simplement l'utilisateur qui rentre ces données au clavier via l'entrée standard, tu ne pourras ni accélérer, ni revenir en arrière.

    Si tu veux aller à la ligne 4, il faut initialiser une variable à « 4 », la décrémenter chaque fois que tu rencontres un retour à la ligne, et t'arrêter lorsque ta variable atteint zéro.

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 6
    Par défaut
    Merci, mais comment je dois utiliser fseek dans mon cas? En sachant que la taille des lignes est fixe.

  6. #6
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 453

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 6
    Par défaut
    C'est bon j'ai réussi.
    Pour ceux qui sont interessé par la solution j'ai juste mis un for

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
        for(i=0; i<=2; i++)//pour commencé à la ligne 2
        {
             fgets(ligneFichier, NB_BLOC_LARGEUR * NB_BLOC_HAUTEUR + 1, fichier);
        }

    MERCI A TOUT CEUX QUI M ONT AIDE

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

Discussions similaires

  1. Lire les lignes d'un fichier avec csh
    Par nicolas581 dans le forum Linux
    Réponses: 4
    Dernier message: 24/03/2010, 16h38
  2. Réponses: 12
    Dernier message: 18/06/2006, 19h42
  3. lire une ligne d'un fichier
    Par Funraill.net dans le forum C
    Réponses: 21
    Dernier message: 18/06/2006, 14h44
  4. Lire une ligne dans un fichier
    Par dbozec dans le forum Langage
    Réponses: 3
    Dernier message: 03/05/2006, 23h22
  5. [BATCH] lire chaque ligne d'un fichier texte
    Par bartmarley dans le forum Windows
    Réponses: 13
    Dernier message: 22/04/2005, 21h01

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