Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2787 connectés 

  FORUM HardWare.fr
  Programmation
  C

  problème de lecture de fichier texte

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

problème de lecture de fichier texte

n°760305
mirascheat
Posté le 11-06-2004 à 12:25:49  profilanswer
 

Bonjour,
J'ai un fichier texte que je lis ligne par ligne à l'aide de fgets. A chaque ligne j'écris "toto" dans un autre fichier. Le problème est qu'une fois le fichier parcouru en entier mon programme semble recommencer à zero et cela indéfiniment, donc j'ai du "toto" à gogo :p
 

Code :
  1. FILE* fichier;
  2.     FILE* fichier2;
  3.     char stringbuf[200];
  4.    
  5.     fichier = fopen("./essai.csv","r" );
  6.     fichier2 = fopen("./marche.csv","a" );
  7.     while(fgets(stringbuf, 200, fichier) != NULL){
  8.         fprintf(fichier2, "%s\n", "toto" );
  9.     }
  10.     fclose(fichier);
  11.     fclose(fichier2);
  12. }


Message édité par mirascheat le 11-06-2004 à 12:26:20
mood
Publicité
Posté le 11-06-2004 à 12:25:49  profilanswer
 

n°760325
bombyce
Posté le 11-06-2004 à 12:37:26  profilanswer
 

Code :
  1. FILE* fichier;
  2. FILE* fichier2;
  3. char stringbuf[200];
  4.      
  5. fichier = fopen("./essai.csv","r" );
  6. fichier2 = fopen("./marche.csv","a" );
  7. do{
  8.    
  9.     fprintf(fichier2, "%s\n", "toto" );
  10.     fgets(stringbuf, 200, fichier};
  11. }while(!feof(fichier));
  12. fcloseall();


 
je pense a un truc comme ça.
Essaye si ça marche.
A+


Message édité par bombyce le 11-06-2004 à 13:05:24
n°760386
Taz
bisounours-codeur
Posté le 11-06-2004 à 13:27:35  profilanswer
 

Bombyce non, tu as tort, tu ferais bien de regarder comment il fait, c'est la bonne méthode

n°760390
bombyce
Posté le 11-06-2004 à 13:34:00  profilanswer
 

Pourquoi ça n'est pas bon ?
Je parcours jusqu'a la fin du fichier en changeant de lignes a chaques fois.Sauf lors du premier traitement car avec un do{...} while ,le code est parcouru au moins une fois. comprend pas ou je merde.
 
Besoin de tes lumieres!  
A+

n°760404
mirascheat
Posté le 11-06-2004 à 13:46:17  profilanswer
 

tiens je viens d'essayer le fcloseall() et j'obtiens une erreur : [Linker error] undefined reference to 'fcloseall'.
fcloseall se situe bien dans stdio.h ?

n°760407
bombyce
Posté le 11-06-2004 à 13:50:37  profilanswer
 

oui , j'ai verifie sur un bouquin et c'est bien dans stdio.h

n°760415
mirascheat
Posté le 11-06-2004 à 13:56:57  profilanswer
 

D'ou vient cette erreur alors ? sniff

n°760416
Taz
bisounours-codeur
Posté le 11-06-2004 à 13:57:04  profilanswer
 

ben soit tu sais pas lire, soit ton bouquin est pourri : fcloseall est pas standard et spécifique à certains environnements. par exemple, certains envionnement on décrété que fclose(NULL° fermait tout...

n°760420
bombyce
Posté le 11-06-2004 à 14:02:24  profilanswer
 

du calme, ça fait 3 semaines que je fais du C...je sais presque rien de ce langage; et c'est un livre que l on m'a prete. JE SAIS POURTANT LIRE et c'est ce qu il y a de marque (C'est un aide memoire de C qui date de 1996, edition MARABOUT INFORMATIQUE).  

n°760423
Joel F
Real men use unique_ptr
Posté le 11-06-2004 à 14:04:37  profilanswer
 

Bombyce a écrit :

du calme, ça fait 3 semaines que je fais du C...je sais presque rien de ce langage; et c'est un livre que l on m'a prete. JE SAIS POURTANT LIRE et c'est ce qu il y a de marque (C'est un aide memoire de C qui date de 1996, edition MARABOUT INFORMATIQUE).


 
Hors du K&R point de salut pauvre mortel :o

mood
Publicité
Posté le 11-06-2004 à 14:04:37  profilanswer
 

n°760435
mirascheat
Posté le 11-06-2004 à 14:08:52  profilanswer
 

En effet je viens de parcourir le net à la recherche d'info sur ce "Error link" (qui a l'air spécifique à Dev-cpp) ... Bon si quelqu'un connait le standard pour ce compilateur je prends sinon je reste avec mes deux fclose ...
 
edit : et encore une fois merci à Taz, le vainqueur était fclose(NULL)  :lol:


Message édité par mirascheat le 11-06-2004 à 14:11:08
n°760436
Joel F
Real men use unique_ptr
Posté le 11-06-2004 à 14:09:56  profilanswer
 

gcc 3.3.xxx, norme ANSI, voire C99 smieux
trouve toi un Kernigham & Ritchie a la FNAC et zou

n°760440
bombyce
Posté le 11-06-2004 à 14:11:28  profilanswer
 

:sweat:  pas cool Joel F
 
A+

n°760442
Taz
bisounours-codeur
Posté le 11-06-2004 à 14:11:36  profilanswer
 

mirascheat a écrit :

En effet je viens de parcourir le net à la recherche d'info sur ce "Error link" (qui a l'air spécifique à Dev-cpp) ... Bon si quelqu'un connait le standard pour ce compilateur je prends sinon je reste avec mes deux fclose ...
 
edit : et encore une fois merci à Taz, le vainqueur était fclose(NULL)  :lol:

fais avec, c'est la seule bonne solution

n°760443
Joel F
Real men use unique_ptr
Posté le 11-06-2004 à 14:12:01  profilanswer
 

Bombyce a écrit :

:sweat:  pas cool Joel F
 
A+


 
o_O ??,  :heink:

n°760474
Taz
bisounours-codeur
Posté le 11-06-2004 à 14:26:48  profilanswer
 

Taz a écrit :

fais avec, c'est la seule bonne solution

je parlais pas du fclose(NULL) qui est pas standard : tu vas changer ton programme d'environnement et il marchera pas. franchement je suis sur que tu codes avec les pieds, c'est pas une ligne en plus qui va pourrir ton programme :o

n°760476
mirascheat
Posté le 11-06-2004 à 14:28:27  profilanswer
 

bon on fait j'ai une erreur qui fait planter mon soft ... je pensais que c'etait parce que mon fichier était trop gros (cf mon 1er post) mais bon ca ne semble pas être ca, donc je poste mon bout de code ici (l'erreur doit venir au niveau de element parce que c'est depuis que j'ai implémenté cette variable que j'ai des pbs) :

Code :
  1. FILE *fichier, *fichier2;
  2.     char stringbuf[200];
  3.     char *item, *element;
  4. fichier = fopen("./essai.csv","r" );
  5.     fichier2 = fopen("./marche.csv","a" );
  6.     while(fgets(stringbuf, 200, fichier) != NULL){
  7.         strtok(stringbuf, ";" );
  8.         strtok(NULL, ";" );
  9.         element = strtok(NULL, ";" );
  10.         valuee = strtok(NULL, "\0" );
  11.         if(format_type == 0){
  12.             fprintf(fichier2, "%s%s%s\n", "tata", element, valuee);
  13.         }
  14. }
  15.     fclose(NULL);
  16.    
  17. }

n°760478
mirascheat
Posté le 11-06-2004 à 14:30:16  profilanswer
 

Taz a écrit :

je parlais pas du fclose(NULL) qui est pas standard : tu vas changer ton programme d'environnement et il marchera pas. franchement je suis sur que tu codes avec les pieds, c'est pas une ligne en plus qui va pourrir ton programme :o


 
non mais on va dire que c'est pour ma culture ... et c'est un soft que je vais être le seul à utiliser donc la portabilité je m'en fous un peu :-)

n°760487
Taz
bisounours-codeur
Posté le 11-06-2004 à 14:33:48  profilanswer
 

strtok(NULL, "\0" ); ... ça marche pas

n°760630
mirascheat
Posté le 11-06-2004 à 16:47:33  profilanswer
 

il faut mettre "\n" alors ? c'est juste pour détecter la fin de la ligne ...
par ailleurs j'ai posté un code incomplet tout à l'heure, le voici now :

Code :
  1. FILE *fichier, *fichier2;
  2. char stringbuf[200];
  3. char *item, *element;
  4. fichier = fopen("./essai.csv","r" );
  5. fichier2 = fopen("./marche.csv","a" );
  6. while(fgets(stringbuf, 200, fichier) != NULL){
  7.     strtok(stringbuf, ";" );
  8.     strtok(NULL, ";" );
  9.     element = strtok(NULL, ";" );
  10.     valuee = strtok(NULL, "\0" );
  11.     if(format_type == 0){
  12.         fprintf(fichier2, "%s%s%s\n", "tata", element, valuee);
  13.         if(strstr(element, item) != NULL){
  14.              fprintf(fichier2, "%s\n", "toto" );   
  15.         }
  16.     }
  17.     fclose(NULL);
  18. }


 
je pense que l'erreur se situe au niveau du :
if(strstr(element, item) != NULL){
mais c'est juste un presentiment  :D  
 
 

n°760685
Joel F
Real men use unique_ptr
Posté le 11-06-2004 à 17:30:50  profilanswer
 

\n pas \0 ....

n°760694
mirascheat
Posté le 11-06-2004 à 17:46:55  profilanswer
 

de toute facon mon problème ne vient pas de là j'en suis sur (je viens de tester  ;) ) ...


Message édité par mirascheat le 11-06-2004 à 17:49:08
n°761218
mirascheat
Posté le 12-06-2004 à 12:52:48  profilanswer
 

up! atoi("Taz" ) please  :D

n°761220
Taz
bisounours-codeur
Posté le 12-06-2004 à 12:55:18  profilanswer
 

atoi("Taz" ) == atoi("0" ) on est bien d'accord

n°762456
mirascheat
Posté le 14-06-2004 à 10:05:44  profilanswer
 

j'ai voulu simplement faire :
toto = strstr(element, item);
pour voir la valeur que me renvoyé la comparaison et bein ca plante aussi ...


Message édité par mirascheat le 14-06-2004 à 10:06:05
n°764019
mirascheat
Posté le 15-06-2004 à 11:54:00  profilanswer
 

Code :
  1. while(fgets(stringbuf, 200, fichier) != NULL){


 
Je charge une ligne de mon ficher dans stringbuf mais je ne la décharge jamais ... est-ce normal ?
Parce qu'en voyant le résultat j'ai l'impression qu'il y a un buffer qui se charge qui se charge et au bout d'un moment ca fait planter mon programme!!!
 
sinon il est possible de remettre à 0 des char* ?
 
merci pour votre aide

n°764091
Taz
bisounours-codeur
Posté le 15-06-2004 à 12:25:34  profilanswer
 

déjà c'est pas un char*
après fgets stocke dans ton buffer à partir du premier char, donc ça écrase tout contenu précédent et ça rajoute un '\0' final
 
donc c'est toi qui déconne

n°764110
mirascheat
Posté le 15-06-2004 à 12:33:12  profilanswer
 

le char* c'était une autre question ... je demandais juste comment vider un char*
 
En ce qui concerne fgets : si la longueur de ma ligne n-1 est plus grande que ma ligne n, le buffer contient-t-il des résidus de la ligne n-1 au nème passage ?

n°764116
Taz
bisounours-codeur
Posté le 15-06-2004 à 12:35:01  profilanswer
 

peut être que tu as pas compris comment fonctionnait les chaines en C ?
 
si fgets arrive pas à lire une ligne en entier , le reste, tu le récupère au passage suivant

n°764151
el muchach​o
Comfortably Numb
Posté le 15-06-2004 à 12:51:53  profilanswer
 

mirascheat a écrit :

le char* c'était une autre question ... je demandais juste comment vider un char*
 
En ce qui concerne fgets : si la longueur de ma ligne n-1 est plus grande que ma ligne n, le buffer contient-t-il des résidus de la ligne n-1 au nème passage ?


oui

n°765386
mirascheat
Posté le 16-06-2004 à 10:25:46  profilanswer
 

Bon pour le fait que je pensais qu'il y avait un dépassement de mémoire quelque part j'ai mis des malloc et des free pour voir si ca changeait quelque chose (quoique je ne suis pas sur de bien me servir de ces deux instructions), mais ca ne marche toujours pas ...
Je poste mon code complet :

Code :
  1. void __stdcall search_item(char* filename, char* item, int format_type, int file_nb, int msg_acc_id, int RNC_id)
  2. {
  3.     FILE* pm_counters;
  4.     FILE* extracted_data;
  5.     char stringbuf[200];
  6.     char* stringbuf2;
  7.     char* nodeb;
  8.     char* valuee;
  9.     char* RNC_nb2;
  10.     int RNC_nb;
  11.    
  12.     pm_counters = fopen(filename, "r" );
  13.     extracted_data = fopen("./test.csv", "a" );
  14.    
  15.     while(fgets(stringbuf, 200, pm_counters) != NULL){
  16.         if(strstr(stringbuf, item) != NULL){
  17.             stringbuf2 = malloc(200);
  18.             strcpy(stringbuf2, stringbuf);
  19.             if(format_type == 0){
  20.                 nodeb = malloc(10);
  21.                 valuee = malloc(10);
  22.                 valuee = strrchr(stringbuf2, ';') + 1;
  23.                 if(strchr(stringbuf, '-') != NULL){
  24.                     strtok(stringbuf, "-" );
  25.                     nodeb = strtok(NULL, "-" );
  26.                 }
  27.                 else
  28.                     nodeb = 0;
  29.                
  30.                 if(valuee == "N/A" )
  31.                     valuee = 0;
  32.                 fprintf(extracted_data, "%d%c%d%c%d%c%d%c%s%c%s", file_nb, ';', msg_acc_id, ',', file_nb, ';', msg_acc_id, ';', nodeb, ',', valuee);
  33.                 free(nodeb);
  34.                 free(valuee);
  35.                 free(stringbuf2);
  36.             }
  37.         }
  38.     }
  39.    
  40.     fclose(pm_counters);
  41.     fclose(extracted_data);
  42. }


 
si quelqu'un pouvait m'aider merci

n°765449
Taz
bisounours-codeur
Posté le 16-06-2004 à 11:11:22  profilanswer
 

if(valuee == "N/A" )
 
 
tu m'appelles le jour ou ça marche ça

n°765495
mirascheat
Posté le 16-06-2004 à 11:33:44  profilanswer
 

dring !!!
ca ne marche pas !!!
 
d'accord mais ce n'est pas cette faute de débutant de merde qui fait que mon programme ne marche pas ...

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  problème de lecture de fichier texte

 

Sujets relatifs
[java pour les nuls] question gratuite sur la lecture d'un fichierMmap probleme d allocation memoire d un tableau double entrée
Probleme avec Unicodeprobleme pour actualiser une table
Problème grave de sécurité !Ecrire un fichier txt codé en utf-8
[awk/sed] Traitement du fichier de stats boinc...Problème d'accent avec parseur XML en Perl
Probleme de synchronisation de bases MySQL: utiliser SQLyog ?[JAVA] Probleme lecture fichier texte
Plus de sujets relatifs à : problème de lecture de fichier texte


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR