[C++] Problème de position dans un fichier
Résolu
Sethpolma
Messages postés
66
Statut
Membre
-
Char Snipeur Messages postés 10112 Date d'inscription Statut Contributeur Dernière intervention -
Char Snipeur Messages postés 10112 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour à tous !
J'ai un petit problème concernant la lecture de fichiers textes. Je m'explique : j'ai des niveaux contenus dans un fichier texte, définis comme ceci :
Level N
'Titre du niveau
Niveau
La boucle de lecture fonctionne bien. Cependant, j'ai un petit problème pour changer de niveau. Voici ma fonction : ce sera plus parlant...
Le problème doit venir du fscanf... Est-ce que cette fonction change la position courante dans le fichier ?
Merci !
J'ai un petit problème concernant la lecture de fichiers textes. Je m'explique : j'ai des niveaux contenus dans un fichier texte, définis comme ceci :
Level N
'Titre du niveau
Niveau
La boucle de lecture fonctionne bien. Cependant, j'ai un petit problème pour changer de niveau. Voici ma fonction : ce sera plus parlant...
void ReadLevel(int nb)
{
FILE *file = NULL;
file = fopen("levels.txt", "r");
if(!file)
{
printf("Impossible d'ouvrir le fichier des niveaux.");
exit(1);
}
fscanf(file, "Level nb");
char car = fgetc(file);
if( car == 'L' || car == '\x0091' ) // x0091 = '
{
fscanf(file, "\n");
}
extern char lvl[31][31];
for( char i=0 ; i<31 ; i++ )
{
for( char j=0 ; j<31 ; j++ )
{
switch( car = fgetc(file) )
{
// Lecture du niveau
}
}
}
fclose(file);
}
Le problème doit venir du fscanf... Est-ce que cette fonction change la position courante dans le fichier ?
Merci !
4 réponses
-
il me semble que oui.
Pour t'en assurer fscanf(file,"%c",&car);printf("%c",car); plusieur foi d'afiler pour voir si la fonction avance bien le pointeur -
houalaa c'est super lent ton code...
fscanf ca rame comme fonction.
Si tu sais avec quoi tu travailles, fais un fread(), bcp plus rapide.
-
Un petit message pour indiquer la solution que j'ai trouvé (des fois que ça aide quelqu'un...) :
while( fgetc(file) != feof(file)) { fscanf(file, "evel %d\n", &num); if( num == nblevel ) break; }
Ca marche comme ça. En clair, tant qu'on est pas à la fin du fichier, on cherche la bonne position correspondant au niveau souhaité. Une fois que l'on y est, on quitte la boucle, et on peut passer au traitement du niveau.
C'est lent ? Je vais me pencher sur la doc concernant fread alors. Mais bon, c'est un jeu genre Sokoban. Donc, c'est pas encore dramatique... :D -
je pense en effet qu'il vaut mieu rester avec scanf beaucoup plus facile à utilisé.
En plus si tu perd 1s lors du chargement de niveau, ça risque pas de trop géner.
Mais à ta place, vu que tu fait du C++, j'aurai utilisé les flux d'E/S sur les fichiers et la STL, avec en particulier <string> ce qui facilite les choses.
Ce que tu fait resemble plus à du C