C lecture fichier ligne par ligne

Fermé
letrancheur Messages postés 210 Date d'inscription dimanche 14 juillet 2013 Statut Membre Dernière intervention 25 août 2020 - Modifié par letrancheur le 29/12/2014 à 03:45
letrancheur Messages postés 210 Date d'inscription dimanche 14 juillet 2013 Statut Membre Dernière intervention 25 août 2020 - 29 déc. 2014 à 18:38
Bonjour,
Voila cela fait quelques moi que je programmes et je suis occupé d'essayer de faire un petit RPG et je cherche un moyen d'afficher la map. C'est à dire, la map est d'une dimension de 100*100 et j'en affiche sur l'écran du coup qu'une partie.
Je cherche à faire la lecture de la map +affichage jusqu'au caractère étant égale à la taille de l'écran puis passer à la ligne suivant dans le tableau + le fichier et afficher à nouveau les caractères ...
Voici ce que j'ai produit jusqu'à maitenant.
if (map!=NULL)
{
  do{
    do{
      carLu = fgetc(map);
      tabville[ligne][colonne]=atoi(&carLu);
      sprintf(TblMsg,"\x1b[1m%c",carLu);
      AfficherXY(TblMsg,posX+3,posY+4);
      posX+=2;
    }while (posX/2<wWidth/2-1-11);
  }while (posY/2<wHeight/2-6); 
  fclose(map);
}

Pour le moment cela s'affiche bien question tableau mais question caractères du texte il continue la lecture de la ligne à la colonne suivante
Quelqu'une aurait-il une solution?

Merci d'avance

A voir également:

1 réponse

fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 836
29 déc. 2014 à 14:10
Bonjour,

tabville[ligne][colonne]=atoi(&carLu);
Ce n'est pas bon ça. atoi() prend une chaîne de caractère De plus, cette fonction est obsolète. Si tu veux convertir carLu en entier, il suffit de faire carLu-'0'.
Pour passer à la ligne suivante, il suffit de lire la ligne jusqu'au '\n'.

Pourquoi ne pas utiliser fgets() pour lire toute la ligne (si tu connais la longueur maximale ?), et tu ne récupères que la partie qui t'intéresse (via strncpy).

Cdlt,
0
letrancheur Messages postés 210 Date d'inscription dimanche 14 juillet 2013 Statut Membre Dernière intervention 25 août 2020 7
29 déc. 2014 à 17:39
Bonjour,
Car je début :p. Comment me conseille tu alors de faire?
justen un
tabville =carlu;
alors?
Pour passer à la ligne suivant j'ai un espace du coup je pensais faire
while (carLu != ' ') 
{ 
  sprintf(TblMsg,"\x1b[1m%c",carLu);
} 

Et au niveau du fgetc() c'est sous les conseilles de mon prof d'info que j'avais mis cela.
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 836
29 déc. 2014 à 18:07
Faut voir comment est codé ton fichier...
Si tu es sûr que ce sont des chiffres (donc sur 1 position), tu peux faire :
tabville[ligne][colonne]=carLu-'0';

Si c'est un nombre supérieur à 10 que tu veux récupérer, ça ne sera pas la bonne méthode. Mais là, on a besoin de précision sur le codage des informations dans le fichier.

D'où sort ton espace ? Nous avons vraiment de connaître précisément la structure du fichier.

Si par exemple, ton fichier contient 100 caractères sur une ligne et 100 lignes.
Tu peux faire une boucle for et mettre dedans :
char buffer[101];
fgets(buffer, sizeof buffer, map);


Maintenant, d'autres suggestions pour ton programme.
Pourquoi ne pas stocker toute la MAP dans un tableau 100x100 ? Ainsi, tu n'as plus qu'à afficher une partie du tableau à l'écran.
Je te conseille de faire une fonction initialisation() qui se charge de remplir le tableau et une fonction affichage qui s'occupe de l'affichage. Ça sera plus propre et plus facile à maintenir.
0
letrancheur Messages postés 210 Date d'inscription dimanche 14 juillet 2013 Statut Membre Dernière intervention 25 août 2020 7 > fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022
Modifié par letrancheur le 29/12/2014 à 19:11
Non, ce sont des chiffres et des lettres à la suite les un des autre mais si il faut je peux le transformer pour ne laisser que des chiffre. Ce fichier serra la map mais n'est pas encore construit donc libre à ce niveau la.
Je vais essayer ton système de buffer.
Et concernant la suggestion n'est pas mal non plus mais je ne sais pas comment je pourrais réaliser cela. :s
0