Lire un fichier caractère par caractère.
Résolu/Fermé
Naraka77
Messages postés
10
Date d'inscription
jeudi 15 novembre 2012
Statut
Membre
Dernière intervention
9 janvier 2014
-
Modifié par Naraka77 le 8/12/2012 à 21:00
Naraka77 Messages postés 10 Date d'inscription jeudi 15 novembre 2012 Statut Membre Dernière intervention 9 janvier 2014 - 10 déc. 2012 à 18:01
Naraka77 Messages postés 10 Date d'inscription jeudi 15 novembre 2012 Statut Membre Dernière intervention 9 janvier 2014 - 10 déc. 2012 à 18:01
A voir également:
- Lire un fichier caractère par caractère.
- Caractère ascii - Guide
- Lire le coran en français pdf - Télécharger - Histoire & Religion
- Caractere speciaux - Guide
- Caractère spéciaux - Guide
- Lire fichier epub - Guide
3 réponses
ReganDryke
Messages postés
13
Date d'inscription
samedi 8 décembre 2012
Statut
Membre
Dernière intervention
22 février 2013
6
Modifié par ReganDryke le 8/12/2012 à 22:06
Modifié par ReganDryke le 8/12/2012 à 22:06
Pourquoi est ce que tu n'utilise pas getline ?
Avec un code du genre :
Avec un code du genre :
#include <iostream> #include <fstream> #include <string> using namespace std; int main() { ifstream fichier ("Taquin_soluble.txt", ios::in); // ios::in pour la lecture, tu n'as pas besoin de binary car tu lis un fichier texte et pas un fichier binaire string ligne; while (!fichier.eof()) //eof est le flag de fin de fichier il se met a 1 quand tu as atteint la fin du fichier. { getline(fichier,ligne); // tu recupere une ligne de ton fichier sous la forme d'un string // Un petit for pour parcourir ta ligne; for(int i=0;i<ligne.length();i++) { //ligne[i] te renverra le caractère placer a la i ème position. cout<< "Caractere numero " <<i<<" : "<<ligne[i]<<endl; } } }
ReganDryke
Messages postés
13
Date d'inscription
samedi 8 décembre 2012
Statut
Membre
Dernière intervention
22 février 2013
6
9 déc. 2012 à 12:17
9 déc. 2012 à 12:17
Il suffit de trouver un moyen de sortir plus tot de ton while. Donc de le rendre faux quand ta ligne est vide. Le moyen le plus simple a comprendre consiste a utiliser un booleen et l'operateur ET.
#include <iostream> #include <fstream> #include <string> using namespace std; int main() { ifstream fichier ("Taquin_soluble.txt", ios::in); // ios::in pour la lecture, tu n'as pas besoin de binary car tu lis un fichier texte et pas un fichier binaire string ligne; bool ligneVide=false; // Ce booleen vas te permettre de sortir plus tot de ta condition. while (!fichier.eof() && !ligneVide) //eof est le flag de fin de fichier il se met a 1 quand tu as atteint la fin du fichier. // Il suffit d'utiliser l'operateur ET ainsi que ton booleen pour que tu reste dans ta fonction seulement quand eof ET ligneVide sont faux. { getline(fichier,ligne); // tu recupere une ligne de ton fichier sous la forme d'un string // Tu teste si ta string est vide. if (ligne == "") { ligneVide=true; } // Un petit for pour parcourir ta ligne; for(int i=0;i<ligne.length();i++) { //ligne[i] te renverra le caractère placer a la i ème position. cout<< "Caractere numero " <<i<<" : "<<ligne[i]<<endl; } } }
Naraka77
Messages postés
10
Date d'inscription
jeudi 15 novembre 2012
Statut
Membre
Dernière intervention
9 janvier 2014
9 déc. 2012 à 15:01
9 déc. 2012 à 15:01
Merci infiniment Regan, merci beaucoup du temps que tu m'as accordé et de ton aide !
Ca marche impeccablement :)
Ca marche impeccablement :)
Naraka77
Messages postés
10
Date d'inscription
jeudi 15 novembre 2012
Statut
Membre
Dernière intervention
9 janvier 2014
10 déc. 2012 à 16:23
10 déc. 2012 à 16:23
Je me retourne un dernière fois vers vous (je l'espère...) pour vous demander si il est possible de passer un fichier en argument ?
Car je voudrais, maintenant que mon jeu est créé et marche correctement, pouvoir détecter l'état final (soit la deuxième partie de mon fichier) et elle aussi la placer dans un tableau !
Ou alors, j'aimerais savoir si il est possible de prendre la lecture d'un fichier en cours de route ? (c'est a dire, que avant je me suis arrêter a l'espace, je voudrais dans une autre fonction, recommencer a cet espace en question...)
Voila par exemple ma première fonction qui permet de créer mon état 1 (le début du jeu) :
J'aimerais donc faire la même fonction, mais pour l'état deux ^^.
J'avais pensé a prendre la valeur où se trouvait mon curseur, et l'envoyer comme paramètre a l'autre fonction, afin qu'elle puisse reprendre a cet endroit, mais cela ne marche pas...
J'espère que vous allez pouvoir, une nouvelle fois, m'aider !
Merci d'avance.
Car je voudrais, maintenant que mon jeu est créé et marche correctement, pouvoir détecter l'état final (soit la deuxième partie de mon fichier) et elle aussi la placer dans un tableau !
Ou alors, j'aimerais savoir si il est possible de prendre la lecture d'un fichier en cours de route ? (c'est a dire, que avant je me suis arrêter a l'espace, je voudrais dans une autre fonction, recommencer a cet espace en question...)
Voila par exemple ma première fonction qui permet de créer mon état 1 (le début du jeu) :
char **creer_plateau(int nb_ligne, int nb_colonne){ int i = 0, j = 0, curseur = 0, k = 0; string ligne; bool ligneVide=false; // Ce booleen vas permettre de sortir plus tot de ta condition. char **plateau = new char*[nb_ligne]; char plateau_temp[nb_ligne*nb_colonne]; for (i = 0; i < nb_ligne; i++) plateau[i] = new char[nb_colonne]; ifstream fichier ("Taquin_soluble.txt", ios::in); while (!fichier.eof() && !ligneVide) //eof est le flag de fin de fichier il se met a 1 quand on atteint la fin du fichier. // Il suffit d'utiliser l'operateur ET ainsi que le booleen pour que rester dans ta fonction seulement quand eof ET ligneVide sont faux. { getline(fichier,ligne); // on recupere une ligne de ton fichier sous la forme d'un string // on teste si la string est vide. if (ligne == "") { ligneVide=true; } for(int i=0;i<ligne.length();i++) { //ligne[i] te renverra le caractère placer a la i ème position. plateau_temp[k] = ligne[i]; k++; } } k = 0; for(i = 0; i < nb_ligne; i++){ for(j = 0; j < nb_colonne; j++){ plateau[i][j] = plateau_temp[k]; k++; } } return (plateau); }
J'aimerais donc faire la même fonction, mais pour l'état deux ^^.
J'avais pensé a prendre la valeur où se trouvait mon curseur, et l'envoyer comme paramètre a l'autre fonction, afin qu'elle puisse reprendre a cet endroit, mais cela ne marche pas...
J'espère que vous allez pouvoir, une nouvelle fois, m'aider !
Merci d'avance.
Naraka77
Messages postés
10
Date d'inscription
jeudi 15 novembre 2012
Statut
Membre
Dernière intervention
9 janvier 2014
10 déc. 2012 à 18:01
10 déc. 2012 à 18:01
En essayant certain truc, voici mon meilleur résultat (mais ce n'est pas encore ça ^^')
J'obtiens un tableau du type :
ABC
GH.
GH.
Au lieu de :
ABC
DEF
GH.
Je ne vois pas comment régler ceci.. !
while (!fichier.eof()) { getline(fichier,ligne); // On recupere une ligne de ton fichier sous la forme d'un string // On teste si la string est vide. if (ligne == "") { ligneVide=true; } if(ligneVide == true) { getline(fichier,ligne2); } for(int i=0;i<ligne2.length();i++) { //ligne2[i] renverra le caractère placer a la i ème position. plateau_temp[k] = ligne2[i]; k++; } } k = 0; for(i = 0; i < nb_ligne; i++){ for(j = 0; j < nb_colonne; j++){ plateau_model[i][j] = plateau_temp[k]; k++; } }
J'obtiens un tableau du type :
ABC
GH.
GH.
Au lieu de :
ABC
DEF
GH.
Je ne vois pas comment régler ceci.. !
Naraka77
Messages postés
10
Date d'inscription
jeudi 15 novembre 2012
Statut
Membre
Dernière intervention
9 janvier 2014
Modifié par Naraka77 le 9/12/2012 à 10:38
Modifié par Naraka77 le 9/12/2012 à 10:38
Je n'y avais pas pensé !
Merci en tout cas, ça marche super bien !
Je n'ai maintenant, plus qu'a mettre chaque valeur que je récupère dans un tableau afin d'en faire mon plateau de jeu ! Mais surtout, il faut que j'arrive a arrêter la boucle
Merci en tout cas, ça marche super bien !
Je n'ai maintenant, plus qu'a mettre chaque valeur que je récupère dans un tableau afin d'en faire mon plateau de jeu ! Mais surtout, il faut que j'arrive a arrêter la boucle
while(..)a mon "retour à la ligne" entre mes deux états (bien-sur, je n'y arrive pas...).