[C - SDL] Lire un fichier texte
Résolu/Fermé
A voir également:
- [C - SDL] Lire un fichier texte
- Lire le coran en français pdf - Télécharger - Histoire & Religion
- Lire fichier epub - Guide
- Fichier rar - Guide
- Lire fichier bin - Guide
- Comment réduire la taille d'un fichier - Guide
12 réponses
Oui, mais ça c'est juste pour voir si ça marche.
Il faut adapter le code à tes besoins. Voila la procedure complete que j'ai nommé restaurerNiveau.
Après, il te faut une procédure qui redessine le monde d'après le tableau ...
Si ça ne marche pas, dis moi ou ça plante.
Il faut adapter le code à tes besoins. Voila la procedure complete que j'ai nommé restaurerNiveau.
int restaurerNiveau() { FILE* fichier = NULL; int i = 0, j = 0; //declarer une variable de type char avec une longueur suffisante char ligne [256]; fichier = fopen("niveaux.txt", "r"); for (i = 0 ; i < NB_BLOCS_HAUTEUR ; i++) { //lire une ligne entière maximum 256 caractères ou jusqu'à \n fgets(ligne,256,fichier); for (j = 0 ; j < NB_BLOCS_LARGEUR ; j++) //lire chaque caractère (byte: entier codé sur un octet, c'est le code ascii du caractère) //soustraire 48 (code ascii du caractère '0') //stocker le resultat dans le tableau niveau {niveau[j][i]=ligne[j]-48;} } fclose(fichier); return 1; }
Après, il te faut une procédure qui redessine le monde d'après le tableau ...
Si ça ne marche pas, dis moi ou ça plante.
Bonjour,
La bonne methode pour recuperer la sauvegarde est de faire la démarche inverse de celle qui t'as permis de créer le fichier.
Quel code as-tu utilisé?
Slt.
La bonne methode pour recuperer la sauvegarde est de faire la démarche inverse de celle qui t'as permis de créer le fichier.
Quel code as-tu utilisé?
Slt.
J'ai utilisé ce code:
int sauvegarderNiveau(int niveau[][NB_BLOCS_HAUTEUR]) { FILE* fichier = NULL; int i = 0, j = 0; fichier = fopen("niveaux.txt", "w"); for (i = 0 ; i < NB_BLOCS_HAUTEUR ; i++) { for (j = 0 ; j < NB_BLOCS_LARGEUR ; j++) { fprintf(fichier, "%d", niveau[j][i]);} fprintf(fichier,"\n"); } fclose(fichier); return 1; }
d'après ce que je vois, tu ecris successivement des entiers issus de ton tableau niveau dans une ligne de texte
l'inverse serait de lire une ligne de texte et de transformer chaque caractère en un entier et le stocker dans ton tableau niveau
ça donnerait:
si mes souvenir du C sont bons ça devrait marcher.
A+.
l'inverse serait de lire une ligne de texte et de transformer chaque caractère en un entier et le stocker dans ton tableau niveau
ça donnerait:
FILE* fichier = NULL; int i = 0, j = 0; //declarer une variable de type char avec une longueur suffisante char ligne [256]; fichier = fopen("niveaux.txt", "r"); for (i = 0 ; i < NB_BLOCS_HAUTEUR ; i++) { //lire une ligne entière maximum 256 caractères ou jusqu'à \n fgets(ligne,256,fichier); for (j = 0 ; j < NB_BLOCS_LARGEUR ; j++) //lire chaque caractère (byte: entier codé sur un octet, c'est le code ascii du caractère) //soustraire 48 (code ascii du caractère '0') //stocker le resultat dans le tableau niveau {niveau[j][i]=ligne[j]-48;} } fclose(fichier);
si mes souvenir du C sont bons ça devrait marcher.
A+.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
J'ai essayé ta technique...
Il y a de l'idée, mais c'est comme les deux méthodes que j'ai expérimenté, ça ne marche pas comme cela devrait...
Il y a de l'idée, mais c'est comme les deux méthodes que j'ai expérimenté, ça ne marche pas comme cela devrait...
Je fais un test avec le modèle de sauvegarde que t'as mis plus haut et je te dis ce qu'il en est.
A+
A+
Alors voila les resultats du test.
un petit programme qui illustre comment decoder ton fichier.
A+.
un petit programme qui illustre comment decoder ton fichier.
#include <stdio.h> #include <stdlib.h> #include <string.h> int main() { //pour l'exemple je cree un tableau de 2 lignes de texte char ligne [2][256]; int i,j; int niveau[2][70]; //initialisation du taleau de texte , en fait c'est comme un fichier" strcpy (ligne[0],"0000000000000000004500000000000004500000000000000000000000000000000045"); strcpy (ligne[1],"1111111111111111114511111111111114511111111111111111111111111111111111"); for (i = 0 ; i < 2 ; i++) { for (j = 0 ; j < 70 ; j++) //lire chaque caractère (byte (entier codé sur un octet, c'est le code ascii du caractère) //soustraire 48 (code ascii du caractère '0') //stocker le resultat dans le tableau niveau {niveau[i][j]=ligne[i][j]-48;}} //imprimer le contenu du taleau niveau pour verifier for (i = 0 ; i < 2 ; i++) { for (j = 0 ; j < 70 ; j++) {printf("%d",niveau[i][j]);} printf("\n"); } return 1; }
A+.
Cela marche très certainement et je comprends le code!
Mais ça ne peut pas répondre à mon problème puisque je ne peux pas lire le fichier texte où j'ai enregistrer le monde créer dans l'éditeur!
Je n'ai jamais utilisé la fonction "strcpy" et donc je ne sais pas s'il est possible de la "coupler" avec gets par exemple pour lire le fichier texte...
Penses-tu que quelque chose comme ça serai possible?
Mais ça ne peut pas répondre à mon problème puisque je ne peux pas lire le fichier texte où j'ai enregistrer le monde créer dans l'éditeur!
Je n'ai jamais utilisé la fonction "strcpy" et donc je ne sais pas s'il est possible de la "coupler" avec gets par exemple pour lire le fichier texte...
Penses-tu que quelque chose comme ça serai possible?
...je ne peux pas lire le fichier texte où j'ai enregistrer le monde...
Je ne te suis pas.
Le fichier est-il bien créé avec le format indiqué?
Si oui qu'est ce qui t'empeche de le lire?
Je ne te suis pas.
Le fichier est-il bien créé avec le format indiqué?
Si oui qu'est ce qui t'empeche de le lire?
Ce que je veux dire, c'est qu'avec le code que tu m'as donné, je dois initialiser ligne[i] "manuellement" alors que normalement sa devrais se faire tout seul en fonction du fichier texte où est sauvegarder la map...
Ce qui me gène ce n'est que ça:
A moins que je n'ai pas bien compris ton code, ces lignes remplacent la lecture du fichier texte...
Ce qui me gène ce n'est que ça:
strcpy (ligne[0],"0000000000000000004500000000000004500000000000000000000000000000000045"); strcpy (ligne[1],"1111111111111111114511111111111114511111111111111111111111111111111111");
A moins que je n'ai pas bien compris ton code, ces lignes remplacent la lecture du fichier texte...
Merci beaucoup! :)
Je sais que ce code tu me l'avais déjà donné, mais c'est: Après, il te faut une procédure qui redessine le monde d'après le tableau ... qui m'as donné "la solution"!
J'ai juste modifié la manière de dessiner le monde justement et ça à l'air de marcher sans problème! :)
Désolé, je suis un peu un boulet...
Je sais que ce code tu me l'avais déjà donné, mais c'est: Après, il te faut une procédure qui redessine le monde d'après le tableau ... qui m'as donné "la solution"!
J'ai juste modifié la manière de dessiner le monde justement et ça à l'air de marcher sans problème! :)
Désolé, je suis un peu un boulet...