Fichier ligne par ligne

-
Messages postés
380
Date d'inscription
samedi 22 janvier 2005
Statut
Membre
Dernière intervention
13 août 2011
-
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

Messages postés
1787
Date d'inscription
lundi 22 novembre 2004
Statut
Membre
Dernière intervention
31 janvier 2009
2
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"

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
Messages postés
1787
Date d'inscription
lundi 22 novembre 2004
Statut
Membre
Dernière intervention
31 janvier 2009
2
char *szFile;
char *c;
int i, j,CurrentNum;

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

for(int i=0; iULARGE_INTEGERJokyQi=QI("Joky"

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
Messages postés
380
Date d'inscription
samedi 22 janvier 2005
Statut
Membre
Dernière intervention
13 août 2011
7
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