begin process at 2012 05 29 04:25:42
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C

 > 

Windows

 > 

Fichier & Disque

 > 

fichier ligne par ligne


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

fichier ligne par ligne

samedi 9 septembre 2006 à 13:21:45 | fichier ligne par ligne

blinix123

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

samedi 9 septembre 2006 à 13:48:29 | Re : fichier ligne par ligne

Joky

Membre Club
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"

samedi 9 septembre 2006 à 17:39:06 | Re : fichier ligne par ligne

blinix123

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
samedi 9 septembre 2006 à 17:45:45 | Re : fichier ligne par ligne

Joky

Membre Club
char *szFile;
char *c;
int i, j,CurrentNum;

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

for(int i=0; i<iNbrLigne; i++)
{
       c = szFile + 144*i;
       j = 0
       while(j < 145)
       {
             CurrentNum = *c - '0';
             c++; j++;
       }
}
            
 Donc tu récupères tout ton fichier en une seule fois
CurrentNum prendra pour valeur tous les numéros les uns après les autres des levels i

ULARGE_INTEGERJokyQi=QI("Joky"

samedi 9 septembre 2006 à 23:03:16 | Re : fichier ligne par ligne

blinix123

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
samedi 9 septembre 2006 à 23:35:30 | Re : fichier ligne par ligne

yohan49

Membre Club
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



Cette discussion est classée dans : fichier, ligne, nb, niveau, blocs


Répondre à ce message

Sujets en rapport avec ce message

[C] lignes d'un fichier dans un tableau : Segmentation fault [ par Michel76 ] Bonjour,Pardonnez-moi de cette question de débutant.Soit un fichier contenant :-----001002-----Je souhaiterais mettre chacune des lignes de ce fichier probleme modification fichier [ par gusdark ] salut , j'ai un probleme :j'ai fait un code pour modifier une ligne d'un fichier :-il copie les premieres lignes jusqu'a la ligne a modifier dans un a lire un ligne non defini... [ par jojomillenium ] Hello! J'ai un souci, je sais pas comment faire! Je dois lire un fichier qui est généré par un autre programme, donc je ne peux pas le modifier. Dans [Langage C] Obtenir une ligne d'un fichier (scanf%[^X]) [ par Thranduil ] Bonjour, j'essaie de créer une fonction qui doit lire une ligne entière d'un fichier texte (donc jusqu'au '\n' mais ça ne marche pas. (C'est la même q lecture fichier et test des lignes... [ par jojomillenium ] Bonjour, J'aimerai lire un fichier qui ressemble a ca: KJ  1 3 5; I  OPL; B 12 34 78, 90; I  PPL; et ainsi de suite des lignes qui ne sont pas du meme Probleme boucles Fstream comparaison [ par nerone21 ] Bonsoir a vous les serials codeurs, alors j'aurais besoin de vos lumiere car j'ai un petit gros probleme que je ne comprend pas.voici mon code en dess message d'erreur [ par mqsi ] bjr a tous;j'ai un petit probleme : j'ai un programme qui lire un fichier text ligne par ligne quand le fichier contient plusieur ligne( equivalent  3 MFC lire un fichier texte ligne par ligne [ par mqsi ] salut a tous,vs pouvez me dire comment lire un fichier texte ligne par ligne,puis recuperer chaque ligne ds un tableau,et merci pr l'aide,je travail a Lire une ligne au hazard dans un fichier [ par sebastienmz ] Bonjour je suis confronter a un problème : j'aimerais lire une ligne au hazard dans un fichier et je sais pas trop comment faire , pourriez-vous m'aid algorithme de conversion de fichier [ par novaghost ] Bonjour, j'aimerais un coup de pouce pour faire un algorithme de conversion de fichier texte. Voila je doit pour exercice, faire un programme qui conv


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,577 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales