IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Lecture dans un fichier .txt


Sujet :

C

  1. #1
    Membre confirmé
    Homme Profil pro
    Apprenti Ingénieur Informatique
    Inscrit en
    Octobre 2013
    Messages
    82
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Apprenti Ingénieur Informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2013
    Messages : 82
    Par défaut Lecture dans un fichier .txt
    Bonjour,

    je me rends un peu fou ... j'ai codé un programme qui écrit dans un fichier des prenoms peu à peu.
    A la fin de la première boucle, il y a une dixieme de terme dans le fichier. Je l'ouvre en a+ via fopen et ensuite j'écris avec fprintf.

    Mon fichier ressemble à ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    a
    b
    c
    d
    e
    f
    g
    h
    i
    j
    k
    Mais lorsque je le lit avec fscanf en changeant de ligne à chaque fois, il m'affiche des symboles bizarre style "%?," etc.

    J'aimerais savoir si ça vous ai déjà arrivé.. Car je nage vraiment, et pourtant je sais habituellement comment lire dans un fichier.

    J'ai fais le test suivant :
    je ne supprime pas le fichier avant d'exécuter mon programme, et là, la lecture choppe les valeurs du tour précédent.
    Pourtant à la fin du tour, le fichier est bien rempli de valeur (même lorsque je le supprime avant d'exécuter le programme), et ma fonction lecture s'effectue bien après ma fonction écriture..


    Merci beaucoup

    Ben

  2. #2
    Membre Expert
    Avatar de imperio
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2010
    Messages
    868
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2010
    Messages : 868
    Par défaut
    Tu lis / ecris mal dans ton fichier je pense. Montre-nous ton code.

  3. #3
    Membre confirmé
    Homme Profil pro
    Apprenti Ingénieur Informatique
    Inscrit en
    Octobre 2013
    Messages
    82
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Apprenti Ingénieur Informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2013
    Messages : 82
    Par défaut
    Ma fonction écriture:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    void ecriture (Joueur t[], char nom[])
    {
    	FILE *pfile; 
    	pfile = fopen("res.txt", "a+"); //ouverture fichier
    	fprintf(pfile,"%s\n",nom);//ecriture dans le fichier du nom du joueur (en ajout)
    }
    Ma fonction écriture :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
    void lecture (int nbjoueurs,int nbpartie)
    {
    	char ligne[20];
    	int i;
    	FILE *pfile; 
     
    	if(flagopen==0)//flag d'ouverture du fichier pour ne pas l'ouvrir deux fois
    	{
    		flagopen=1;
    		pfile = fopen("res.txt", "r"); //ouverture fichier
    	}
     
    	printf("\nDonc voici les résultats du jeu via  res.txt\n"); 
    	for(i=0;i<((nbjoueurs-1)*nbpartie);i++) //on lit toutes les lignes du tableau et on les affiche
    	{
    		fscanf(pfile,"%s",ligne);//lkecture 1ere ligne du fichier
    		printf("\n%s",ligne);//affichage de la ligne
    	}	
    	fclose(pfile);//referme le fichier
    }
    Mais je lis dans le fichier ici en fait car je n'utilise pas ma fonction lecture :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    void gagnant (int nbjoueurs,Joueur t[],int nbpartie)
    {
    	char ligne[200];
    	int j,i,min=1000,mini;
    	FILE *pfile;
    	pfile = fopen("res.txt", "r+"); //ouverture du fichier
    	if(pfile==0)
    	{
    		printf("\nerreur lors de l'ouverture du fichier");
     
    	}
    	printf("\nMaintenant, la lecture des noms dans un fichier, via le compte du nombre d'occurence d'un prenom.");
    	for(i=0;i<((nbjoueurs-1)*nbpartie);i++)//exemple : 3 joueurs, 5 partie -> 2 perdants / partie => 2*5=10 lecture de ligne
    	{
     
     
    		fscanf(pfile,"%s",ligne);//lkecture 1ere ligne du fichier
    		//~ printf("\nLigne du fichier : %s",ligne);
    		for(j=0;j<nbjoueurs;j++)//on parcourt tous les joueurs, pour comparer avec la ligne du fichier
    		{
    			//~ printf("\nLecture de la ligne %d : %s  avec le joueur %d : %s ",i,ligne,t[j].indice,t[j].name);
    			if(strcmp(t[j].name,ligne)==0)//on compare la valeur de la ligne, avec le nom du participant
    			{
    				t[j].scoretxt++;//si on trouve un joueur, son score est incrémenté
    				j=nbjoueurs;
    			}
    		}
    	}
    	for(i=0;i<nbjoueurs;i++)
    	{
    		if(t[i].scoretxt<min)
    		{
    			mini=i;
    			min=t[i].scoretxt;
     
    		}printf("\n %s %d",t[i].name,t[i].scoretxt);
    	}
    	printf("\nLe gagnant via la recherche dans le fichier txt\n Est : %s avec un score de %d\n",t[mini].name,t[mini].scoretxt);
    	fclose(pfile); //on referme le fichier, bien ou non ? A voir
    }

  4. #4
    Membre Expert
    Avatar de imperio
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2010
    Messages
    868
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2010
    Messages : 868
    Par défaut
    Je ne vois qu'un seul truc qui pourrait vraiment poser probleme et ce serait la taille de ta chaine de caracteres. Je trouve que tu te compliques un peu la vie d'ailleurs. Au lieu d'utiliser fscanf, tu ferais mieux d'utiliser getline etant l'utilisation que t'en as... En plus t'auras pas de risque de depassement de memoire comme ca.

    Autre chose :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    pfile = fopen("res.txt", "r+");
    Pourquoi l'ouvrir en lecture et ecriture etant donne que tu ne fais que le lire ?

  5. #5
    Membre confirmé
    Homme Profil pro
    Apprenti Ingénieur Informatique
    Inscrit en
    Octobre 2013
    Messages
    82
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Apprenti Ingénieur Informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2013
    Messages : 82
    Par défaut
    Le problème c'est que quand je lis ma ligne, je l'affiche pour vérifier avec un printf, et les 3 premières correspondent puis ça bug, tout le temps la même ligne qui s'affiche ..
    Sinon merci de l'astuce, ça marche déjà mieux

  6. #6
    Membre Expert
    Avatar de imperio
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2010
    Messages
    868
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2010
    Messages : 868
    Par défaut
    Tu verifies bien la valeur de retour de getline pour verifier que t'as bien lu quelque chose ?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [PERL]Prob lecture/écriture dans un fichier ".TXT"
    Par Magcom dans le forum Langage
    Réponses: 8
    Dernier message: 29/07/2010, 10h36
  2. Réponses: 4
    Dernier message: 24/05/2010, 13h06
  3. Lecture d'un fichier Txt dans une JSP !
    Par bim92i dans le forum Servlets/JSP
    Réponses: 11
    Dernier message: 29/04/2008, 09h55
  4. Lecture de données dans un fichier txt
    Par Marcusss dans le forum MATLAB
    Réponses: 6
    Dernier message: 03/04/2007, 14h40
  5. Lecture répétitive dans un fichier txt
    Par Didine95 dans le forum Langage
    Réponses: 9
    Dernier message: 20/07/2006, 14h30

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo