Rechercher : dans
Par :

C++ : Lecture fichier texte

Dernière réponse le 9 jui 2009 à 11:19:17 Sethpolma, le 2 jun 2005 à 15:44:57 
 Signaler ce message aux modérateurs

Bonjour,

J'aimerais savoir comment lire un fichier texte en C++, et ce caractère par caractère. En effet, voici le code que j'ai imaginé (le fichier texte comprend exactement 25 colonnes et 16 lignes, toutes remplies d'un chiffre).

void ReadLVL(int a)
{
	FILE* file;

	if( a==1 ) file = fopen("lvl001.txt","r");

	for( char j=1 ; j<19 ; j++ )
	{
		for( char i=1 ; i<26 ; i++ )
		{
			lvl[i][j] = fgetc(file);
		}
	}

	fclose(file);
}


Or, le programme, lors de l'appel à cette fonction, quitte instantanément. Cela dit, je n'ai encore jamais eu besoin d'utiliser des fichiers textes. Donc, il est fort probable que ce soit une erreur de programmation...

Merci !

Meilleures réponses pour « C++ : Lecture fichier texte » dans :
MySQL - Chargement d'un fichier texte dans une table VoirPour charger une fichier texte défini comme suit : $ tail /home/user1/test.txt 'nom1',1,9 'nom2',2,3 'nom3',3,54 'nom4',4,2 'nom5',5,9 Dans une table définie comme suit : CREATE TABLE chargertest ( ...
Fichier TXT VoirFormat TXT Un fichier TXT est un fichier texte, c'est-à-dire un simple fichier contenant du texte au format ASCII. Pour ouvrir ou modifier un tel fichier, il suffit d'utiliser le bloc-notes ou un éditeur de texte traditionnel.
Caractéristiques du langage C VoirLe fichier source Le fichier source d'un programme écrit en langage C est un simple fichier texte dont l'extension est par convention .c. Note d'un visiteur (J.Grondin) : L'extension est en minuscules. Le .C (majuscule) est interprété par...

1

Luffy =), le 2 jun 2005 à 16:03:22

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 Parisien, il vaut mieux l'avoir en journal !!! :-P

Répondre à Luffy =)

2

Sethpolma, le 2 jun 2005 à 20:59:34

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...

Répondre à Sethpolma

3

MissZaza, le 2 jun 2005 à 22:33:43

Bonsoir,

Peut-être qu'il n'arrive pas à ouvrir le fichier.
Mets un test sur l'ouverture:
if (!file) // Affiche un message d'erreur

Répondre à MissZaza

10

moberol, le 28 mai 2008 à 11:14:06
  • +1

Bjr! excusez moi ! je suis debutant en C++
je doit lire dans un fichier text le nombre de module existant dans le fichier mais j'ai que des nobre négatif si vous pouvez m'aider...
merci d'avance.

Répondre à moberol

4

Char Snipeur, le 3 jun 2005 à 10:26:28

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. Salutation !
Char Snipeur

Répondre à Char Snipeur

5

Sethpolma, le 3 jun 2005 à 15:19:20

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 !

Répondre à Sethpolma

6

Char Snipeur, le 3 jun 2005 à 21:24:50

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] ! Salutation !
Char Snipeur

Répondre à Char Snipeur

7

Sethpolma, le 6 jun 2005 à 07:31:45

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.

	

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 ?

Répondre à Sethpolma

8

MissZaza, le 6 jun 2005 à 09:57:47

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+.

Répondre à MissZaza

9

Omeya, le 11 jun 2006 à 05:47:28

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 ;)

Répondre à Omeya

11

Doudou95, le 28 mai 2008 à 11:15:39

Pourquoi ne pas ajouter un flux lier au fichier oO

Répondre à Doudou95

12

Doudou95, le 28 mai 2008 à 12:26:23
  • +2

#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 << ....;
}

Répondre à Doudou95

13

kcmo31, le 6 mai 2009 à 14:05:50

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

Répondre à kcmo31

14

bibi87, le 30 mai 2009 à 23:30:54
  • +1

Slt kcmo31, j'éspére que tu as trouvé la réponse à ta question , car moi aussi je cherche à faire la méme chose avec mon interface"afficher le contenu d'un fichier texte dans mon interface c++builder" donc si tu as la solution fais le moi savoir stp, mérciii pour ton aide.

Répondre à bibi87

15

 Doudou95, le 9 jui 2009 à 11:19:17

Surement en mettant tout dans un String

Répondre à Doudou95