Fichier ligne par ligne

Utilisateur anonyme - 9 sept. 2006 à 13:21
yohan49 Messages postés 380 Date d'inscription samedi 22 janvier 2005 Statut Membre Dernière intervention 13 août 2011 - 9 sept. 2006 à 23:35
Yop!
Bon voilou, je ne suis pas fortiche dans la manipulation de fichiers ^^
J'ai un fichier qui contient des lignes de suite de nombre: 000112033011140000...en tout 144 nombres
en fait c'est un jeu qui lit mon fichier .lvl, j'ai ma fenetre qui est diviser en 144 cases (je suis avec la librairie SDL), et donc je lis mon fichier, les 144 nombres, qui rentre les un a la suite des autres dans les 144 cases avec 2 for imbriquer pour faire longeur*largeur! enfin bref lol
Le fait est que le niveau 1 et ses 144 chiffres se trouve dans la ligne 1 de mon fichier, le niveau 2 se trouve dans la ligne 2, etc etc
Comment faire pour ligne une ligne dans un fichier, jouer, puis quand mon niveau est fini, j'aimerais aller lire la ligne 2, la ligne 3, etc etc ???
en fait comment on lit un fichier ligne par ligne quoi ^^

mon code:
#include <stdlib.h>
#include <stdio.h>
#include <SDL/SDL.h>
#include <SDL/SDL_image.h>


#include "constantes.h"
#include "fichiers.h"


 




int chargerNiveau(int niveau[][NB_BLOCS_HAUTEUR]); // Prototype
int sauvegarderNiveau(int niveau[][NB_BLOCS_HAUTEUR]); // Prototype


 




int chargerNiveau(int niveau[][NB_BLOCS_HAUTEUR]) // Le C ne devine pas qu'il s'agit d'un tableau à 2 dimensions, il faut lui donner au moins la taille de la 2nd dimension!
{
    FILE* fichier = NULL;
    char ligneFichier[NB_BLOCS_LARGEUR * NB_BLOCS_HAUTEUR + 1] = {0}; // On crée un tableau de char pour stocker le résultat du chargement du niveau temporaire    int i 0, j 0;


    fichier = fopen("niveaux/niveaux.lvl", "r"); // Ouverture du fichier en lecture seule
    if (fichier == NULL)
 {
  return 0;
 }


    fgets(ligneFichier, NB_BLOCS_LARGEUR * NB_BLOCS_HAUTEUR + 1, fichier); // Le fichier contient une ligne de suite de nombres, on va donc la lire avec un fgets


 // On sait que les 12 premiers caractères représentent la première ligne, les 12 suivants la secondes,...
    for (i = 0 ; i < NB_BLOCS_HAUTEUR ; i++)
    {
        for (j = 0 ; j < NB_BLOCS_LARGEUR ; j++)
        {
            switch (ligneFichier[(i * NB_BLOCS_LARGEUR) + j])
            {
    // Ce sont des lettres qui sont stockéees dans le fichier, 0 est stockées comme le caractère ASCII '0', et sa valeur n'est pas 0!
    // Pour analyser le fichier, il faut tester avec un case '0' et non un case 0.
    // Le switch fait la conversion '0' -> 0,...et place tout dans le tableau carte(niveau dans la fonction)
                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;
}

merci d'avance

5 réponses

cs_Joky Messages postés 1787 Date d'inscription lundi 22 novembre 2004 Statut Membre Dernière intervention 31 janvier 2009 2
9 sept. 2006 à 13:48
Lis tout d'un coup
Rempli un buffer de 144 caractères avec ton premier level
parcour tes 144 caractères, et au lieu de tester fait directement carac - '0'
Et continue avec tes lignes suivantes

ULARGE_INTEGERJokyQi=QI("Joky"
0
Utilisateur anonyme
9 sept. 2006 à 17:39
gnéééé ? j'ai rien compris, en C ca donne quoi ? un buffer c'est quoi ? carac -'0' ca sert à quoi ?
oui je suis débutant dans les fichiers et dans le C par ailleurs
0
cs_Joky Messages postés 1787 Date d'inscription lundi 22 novembre 2004 Statut Membre Dernière intervention 31 janvier 2009 2
9 sept. 2006 à 17:45
char *szFile;
char *c;
int i, j,CurrentNum;

szFile = malloc(TailleDuFichier * sizeof(char));

for(int i=0; iULARGE_INTEGERJokyQi=QI("Joky"
0
Utilisateur anonyme
9 sept. 2006 à 23:03
ouais bon c'est pas grave lol, trop dur pour moi, en plus je vois pas comment récuperer ensuite mes nombres 144 par 144!
merci quand meme
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
yohan49 Messages postés 380 Date d'inscription samedi 22 janvier 2005 Statut Membre Dernière intervention 13 août 2011 8
9 sept. 2006 à 23:35
le plus simple c de modifier ton fichier en lui indiquant un repere sur les lignes

niv1:11111139010909149.....


apres un simple strtok avec en char separateur ':' tu recupere niveau et valeur
0
Rejoignez-nous