C++ : Lecture fichier texte
Fermé
Sethpolma
Messages postés
66
Date d'inscription
mercredi 25 juin 2003
Statut
Membre
Dernière intervention
8 mars 2007
-
2 juin 2005 à 15:44
lydafree - 15 août 2010 à 23:15
lydafree - 15 août 2010 à 23:15
A voir également:
- C++ : Lecture fichier texte
- Fichier rar - Guide
- Fichier host - Guide
- Dans le texte, un seul mot a réellement été écrit en lettres capitales (majuscules). quel est ce mot ? ✓ - Forum Word
- Fichier iso - Guide
- Confirmation de lecture gmail - Guide
12 réponses
Doudou95
Messages postés
1561
Date d'inscription
jeudi 19 juillet 2007
Statut
Membre
Dernière intervention
30 avril 2019
276
28 mai 2008 à 12:26
28 mai 2008 à 12:26
#include <iostream>
using namespace std;
# include <fstream>
fstream file;
file.connect("fichier.txt";ios::in|ios::out|ios::app);
Après faut que je fasse un peu de recherche j'ai ça chez moi la je taff te dirais ça mais c'est un truc à base de
while(file>>...)
{
cout << ....;
}
using namespace std;
# include <fstream>
fstream file;
file.connect("fichier.txt";ios::in|ios::out|ios::app);
Après faut que je fasse un peu de recherche j'ai ça chez moi la je taff te dirais ça mais c'est un truc à base de
while(file>>...)
{
cout << ....;
}
Luffy =)
Messages postés
365
Date d'inscription
mercredi 20 avril 2005
Statut
Membre
Dernière intervention
19 mai 2006
108
2 juin 2005 à 16:03
2 juin 2005 à 16:03
salut =)
le principe est bon, mais la mise en pratique un peu moins... ;-)
sur tes boucles, il faut boucler avec des int et non avec des char.
ensuite si tu as 19 colonnes, il faut penser au caractère de retour à la ligne (\n en général, mais ça pt être \n\r, à voir).
la variable lvl a été déclaré ailleurs que dans la fonction ?
voili voilou ++
le principe est bon, mais la mise en pratique un peu moins... ;-)
sur tes boucles, il faut boucler avec des int et non avec des char.
ensuite si tu as 19 colonnes, il faut penser au caractère de retour à la ligne (\n en général, mais ça pt être \n\r, à voir).
la variable lvl a été déclaré ailleurs que dans la fonction ?
voili voilou ++
Sethpolma
Messages postés
66
Date d'inscription
mercredi 25 juin 2003
Statut
Membre
Dernière intervention
8 mars 2007
15
2 juin 2005 à 20:59
2 juin 2005 à 20:59
Tiens ! Encore toi ! Tu es décidément mon sauveur, Luffy !
Il s'agit toujours du même jeu, avec quelques problèmes supplémentaires... Au fur et à mesure que j'en résouds, d'autres apparaissent... Niveau tableaux dynamiques, ça marche toujours pas. Je pense que je vais tout transformer en statique, et me débrouiller avec.
Par contre, pour la lecture du fichier, je ne vois toujours pas. Bien sûr, la matrice lvl a été déclarée ailleurs. Mais, même en augmentant i et j et en les transformant en entier, ça ne marche pas... Vraiment très bizarre...
Il s'agit toujours du même jeu, avec quelques problèmes supplémentaires... Au fur et à mesure que j'en résouds, d'autres apparaissent... Niveau tableaux dynamiques, ça marche toujours pas. Je pense que je vais tout transformer en statique, et me débrouiller avec.
Par contre, pour la lecture du fichier, je ne vois toujours pas. Bien sûr, la matrice lvl a été déclarée ailleurs. Mais, même en augmentant i et j et en les transformant en entier, ça ne marche pas... Vraiment très bizarre...
MissZaza
Messages postés
149
Date d'inscription
samedi 22 janvier 2005
Statut
Membre
Dernière intervention
7 décembre 2005
33
2 juin 2005 à 22:33
2 juin 2005 à 22:33
Bonsoir,
Peut-être qu'il n'arrive pas à ouvrir le fichier.
Mets un test sur l'ouverture:
if (!file) // Affiche un message d'erreur
Peut-être qu'il n'arrive pas à ouvrir le fichier.
Mets un test sur l'ouverture:
if (!file) // Affiche un message d'erreur
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Char Snipeur
Messages postés
9688
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
2 octobre 2020
1 328
3 juin 2005 à 10:26
3 juin 2005 à 10:26
Salut.
En effet, il peut y avoir un problème d'ouverture de fichier.
D'ailleur, à ta place, je grouperai l'ouverture du fichier avec sa lecture et sa fermeture dans le if(a==1)
D'ailleur, je ne voi vraiment pas l'interet de passer un argument à cette fonction. autant faire dans l'apel : if (a==1) ReadLVL();
donne nous la declaration de lvl aussi stp.
En effet, il peut y avoir un problème d'ouverture de fichier.
D'ailleur, à ta place, je grouperai l'ouverture du fichier avec sa lecture et sa fermeture dans le if(a==1)
D'ailleur, je ne voi vraiment pas l'interet de passer un argument à cette fonction. autant faire dans l'apel : if (a==1) ReadLVL();
donne nous la declaration de lvl aussi stp.
Sethpolma
Messages postés
66
Date d'inscription
mercredi 25 juin 2003
Statut
Membre
Dernière intervention
8 mars 2007
15
3 juin 2005 à 15:19
3 juin 2005 à 15:19
La déclaration de lvl est : char lvl[25][18]. Je ne pense pas que le problème vienne de là, car j'ai essayé quelques niveaux, et tout fonctionnait très bien.
Pour l'existence du fichier, je vais essayer... Vraiment très étrange... D'habitude je pense à faire cela (tous les chargements des images ont leurs propres messages d'erreurs). J'essaierais ça dès que je pourrai.
Sinon, l'argument est nécessaire : ce sera la même fonction pour tous les niveaux, et le fichier change selon le niveau où l'on est. Pour le niveau 1, ce sera le fichier "lvl001.txt". Pour le 2, "lvl002.txt", et ainsi de suite.
Je vous tiens au courant !
Pour l'existence du fichier, je vais essayer... Vraiment très étrange... D'habitude je pense à faire cela (tous les chargements des images ont leurs propres messages d'erreurs). J'essaierais ça dès que je pourrai.
Sinon, l'argument est nécessaire : ce sera la même fonction pour tous les niveaux, et le fichier change selon le niveau où l'on est. Pour le niveau 1, ce sera le fichier "lvl001.txt". Pour le 2, "lvl002.txt", et ainsi de suite.
Je vous tiens au courant !
Char Snipeur
Messages postés
9688
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
2 octobre 2020
1 328
3 juin 2005 à 21:24
3 juin 2005 à 21:24
a ce moment la, je te conseil de faire juste avant le for :
if(file==NULL) {cerr<<"pb chargement level\n";return;}
enfin, cherche pas trop, si tu as déclarer lvl[25][18], c'est normal que ça plante ! tu va chercher lvl[25][18] or en C les tableau commencent à 0 (c'est pas à toi que je l'ai deja dit?) donc au max tu peux apeler lvl[24][17] !
if(file==NULL) {cerr<<"pb chargement level\n";return;}
enfin, cherche pas trop, si tu as déclarer lvl[25][18], c'est normal que ça plante ! tu va chercher lvl[25][18] or en C les tableau commencent à 0 (c'est pas à toi que je l'ai deja dit?) donc au max tu peux apeler lvl[24][17] !
Sethpolma
Messages postés
66
Date d'inscription
mercredi 25 juin 2003
Statut
Membre
Dernière intervention
8 mars 2007
15
6 juin 2005 à 07:31
6 juin 2005 à 07:31
J'ai revu un petit peu mon code. Maintenant, mon fichier texte est bien lu (mon fichier texte n'avait pas d'extension, ce qui a mit le programme incapable de le reconnaître). J'ai aussi modifié la taille de mon tableau.
Cependant, un problème persiste. Mon fichier texte est bien lu (j'ai fait un cout dans un fichier vierge pour m'en assurer). Or, il semblerait qu'il ne parvienne pas à tester la valeur.
Voici le morceau de code qui se trouve dans la boucle précédente. Si je met un cout en position 1, je retrouve tout dans mon fichier texte. Si je le met en position 2, il n'y a rien (il devrait y avoir au moins un 2). Je soupçonne donc une erreur dans la condition if... Mais, quelle-est elle ?
Cependant, un problème persiste. Mon fichier texte est bien lu (j'ai fait un cout dans un fichier vierge pour m'en assurer). Or, il semblerait qu'il ne parvienne pas à tester la valeur.
int boxc = 0, goalc = 0, wallc = 0;
Box = new box[nbBox];
Goal = new goal[nbGoal];
Wall = new wall[nbWall];
for( int j=1 ; j<19 ; j++ )
{
for( int i=1 ; i<27 ; i++ )
{
lvl[i][j] = fgetc(file);
// Position 1
if( lvl[i][j] == 3 )
{
// Position 2
Box[boxc] = box(i,j);
boxc++;
}
if( lvl[i][j] == 2 )
{
Goal[goalc] = goal(i,j);
goalc++;
}
if( lvl[i][j] == 5 )
{
Sokoban[0] = soko(i,j);
}
if( lvl[i][j] == 1 )
{
Wall[wallc] = wall(i,j);
wallc++;
}
}
}
Voici le morceau de code qui se trouve dans la boucle précédente. Si je met un cout en position 1, je retrouve tout dans mon fichier texte. Si je le met en position 2, il n'y a rien (il devrait y avoir au moins un 2). Je soupçonne donc une erreur dans la condition if... Mais, quelle-est elle ?
MissZaza
Messages postés
149
Date d'inscription
samedi 22 janvier 2005
Statut
Membre
Dernière intervention
7 décembre 2005
33
6 juin 2005 à 09:57
6 juin 2005 à 09:57
Bonjour,
Quand tu fais fgetc(), tu récupères un caractere ou plutôt le code ASCII de ce caractere, c'est pourquoi ta comparaison ne fonctionne pas.
Tu as 2 solutions:
soit tu fais if ( lvl[i][j]=='3' ) pour comparer caractere et caractere,
soit tu convertis ton lvl[i][j] en int et tu le compares ensuite à 3.
Bonne prog.
A+.
Quand tu fais fgetc(), tu récupères un caractere ou plutôt le code ASCII de ce caractere, c'est pourquoi ta comparaison ne fonctionne pas.
Tu as 2 solutions:
soit tu fais if ( lvl[i][j]=='3' ) pour comparer caractere et caractere,
soit tu convertis ton lvl[i][j] en int et tu le compares ensuite à 3.
Bonne prog.
A+.
Salut,
Pour lire un fichier texte, je te conseille de le faire ligne par ligne en utilisant des strings puis de travailler sur ces strings...
/////////////////////////////////
int numclosed;
string ligne;
ifstream ouverturefichier( "exemple.txt" ); // ouvre le fichier "exemple.txt"
while ( getline( ouverturefichier, ligne )) //lit toutes les lignes du fichier, jusqu'à la dernière
{
//ici tu ajoute ton code pour travailler sur la string "ligne" en cours
}
numclosed = _fcloseall( ); // ferme tous les fichiers ouverts
///////////////////////////////////
Je ne t'ai mis, ici, que le code de base pour lire toutes les lignes d'un fichier texte. A toi ensuite d'effectuer les opérations de recherche/enregistrement/modification de mots ou de caractères dans les strings lus par ce bout de code ;)
Pour lire un fichier texte, je te conseille de le faire ligne par ligne en utilisant des strings puis de travailler sur ces strings...
/////////////////////////////////
int numclosed;
string ligne;
ifstream ouverturefichier( "exemple.txt" ); // ouvre le fichier "exemple.txt"
while ( getline( ouverturefichier, ligne )) //lit toutes les lignes du fichier, jusqu'à la dernière
{
//ici tu ajoute ton code pour travailler sur la string "ligne" en cours
}
numclosed = _fcloseall( ); // ferme tous les fichiers ouverts
///////////////////////////////////
Je ne t'ai mis, ici, que le code de base pour lire toutes les lignes d'un fichier texte. A toi ensuite d'effectuer les opérations de recherche/enregistrement/modification de mots ou de caractères dans les strings lus par ce bout de code ;)
Doudou95
Messages postés
1561
Date d'inscription
jeudi 19 juillet 2007
Statut
Membre
Dernière intervention
30 avril 2019
276
28 mai 2008 à 11:15
28 mai 2008 à 11:15
Pourquoi ne pas ajouter un flux lier au fichier oO
kcmo31
Messages postés
18
Date d'inscription
lundi 1 décembre 2008
Statut
Membre
Dernière intervention
19 décembre 2009
6 mai 2009 à 14:05
6 mai 2009 à 14:05
bonjour , je veux afficher le contenu d'un fichier text(c://windows//temp// exemple.txt) dans mon interface c++ BUILDER sans passer par la boite de dialogue , directement par un bouton
merci
merci
Doudou95
Messages postés
1561
Date d'inscription
jeudi 19 juillet 2007
Statut
Membre
Dernière intervention
30 avril 2019
276
9 juil. 2009 à 11:19
9 juil. 2009 à 11:19
Surement en mettant tout dans un String