Problème de lecture

Résolu
dodo1309 Messages postés 218 Date d'inscription mercredi 17 mai 2006 Statut Membre Dernière intervention 30 mai 2011 - 18 févr. 2009 à 22:27
dodo1309 Messages postés 218 Date d'inscription mercredi 17 mai 2006 Statut Membre Dernière intervention 30 mai 2011 - 19 févr. 2009 à 13:28
Hello ,

J'ai un petit problème de lecture lorsque j'essaye de lire ce fichier (en voici quelque ligne ) :

Le 12 minutes                           16/02/200900:0000:25La une    Actualité          
Une brique dans le ventre               16/02/200900:2500:50La une    Magazine           
JT traduction gestuelle                 16/02/200900:5006:00La une    Actualité          
Matin première                          16/02/200906:0009:40La une    Actualité          
Affaires à suivre                       16/02/200909:4010:05La une    Magazine           
Une brique dans le ventre               16/02/200910:0510:30La une    Magazine           
La kiné                                 16/02/200910:3010:30La une    Série Télé         
Questions d'argent                      16/02/200911:5911:59La une    Magazine           

La structure de fichier se comporte comme cela : 40 caractères puis 10car ,5car , 5car ,10car, 20car

J'ai essayé de faire ceci mais sela ne marche que pour la 1 ere ligne :

#include <stdio.h>
#include <string.h>

main(){

char v1[41];
char v2[11];
char v3[6];
char v4[6];
char v5[11];
char v6[21];
FILE*fdat = fopen("dat.dat","r");
int i;
//lecture anticipée pour le foef

fgets(v1,41,fdat);
fscanf(fdat,"%10s",v2);
fscanf(fdat,"%5s",v3);
fscanf(fdat,"%5s",v4);
fgets(v5,11,fdat);
fscanf(fdat,"%s",v6);

while(!(feof(fdat))){
  printf("%40s %10s %5s %5s %10s %20s",v1,v2,v3,v4,v5,v6); 

  fgets(v1,41,fdat);
  fscanf(fdat,"%10s",v2);
  fscanf(fdat,"%5s",v3);
  fscanf(fdat,"%5s",v4);
  fgets(v5,11,fdat);
  fscanf(fdat,"%s",v6);

 }
 
}

Cela donne comme résultat :

Le 12 minutes                            16/02/2009 00:00 00:25 La une       Actualité                                                                                                                                                                          
 Une brique  dans  le v entre                 16/02/200 900:2500:50La une    Magazine                                          
 JT tr aduct ion gestue  lle                  16/02/200900:5006:00La une    Actualit? ?                                        
 Matin  première                             16/02/200906:0009:40La une    Act ualité                                          
 Affaires ?  ? suivre                        16/02/200909:4010:05La une     Magazine                                           
  Une brique dans le  ventre               16/02/200910:0510:3 0La une     Maga zine                                  La kiné                                  16/02/200 910:3 010:3 0La une      Série Télé                                                   
 Questions  d'arg ent                         16/02/200

Merci D'avance de m'aider

@ +

4 réponses

ed73 Messages postés 276 Date d'inscription lundi 8 septembre 2008 Statut Membre Dernière intervention 15 avril 2013 2
19 févr. 2009 à 10:18
Bonjour,

Il faut lire les lignes du fichier dans une variable suffisament grande : 92 caractères soit la longueur d'une ligne + \n + \0
Il est inutile de lire la première ligne, tu peux faire une boucle while(fgets(...))
dans le cas d'un fichier à champs de longueur fixe strcpy est préférable.
Teste l'exsitence du FILE * avant de commencer la lecture

ed73

#include <stdio.h>
#include <string.h>

main(){

char ligne[92];
char v1[41];
char v2[11];
char v3[6];
char v4[6];
char v5[11];
char v6[21];
FILE*fdat = fopen("dat.dat","r");
int i;

if(fdat!=NULL){
   while(fgets(ligne,sizeof(ligne),fdat)){
     strcpy(v1,ligne,40);
     strcpy(v2,ligne+40,10);
     strcpy(v3,ligne+50,5);
     strcpy(v4,ligne+55,5);
     strcpy(v5,ligne+60,10); 
     strcpy(v6,ligne+70,20);

     printf("%40s %10s %5s %5s %10s %20s",v1,v2,v3,v4,v5,v6);  
     } 
   }
}
3
Pistol_Pete Messages postés 1054 Date d'inscription samedi 2 octobre 2004 Statut Membre Dernière intervention 9 juillet 2013 7
19 févr. 2009 à 12:04
Utilise strncpy
A+
____________________________________________________________________________
Mon site internet :  
http://ImAnalyse.free.fr
3
dodo1309 Messages postés 218 Date d'inscription mercredi 17 mai 2006 Statut Membre Dernière intervention 30 mai 2011
19 févr. 2009 à 11:56
Merci pour ta réponse mais j'ai une erreure de compilation : µ

 --> too many arguments to function ‘strcpy’

Je pense ke la fonction strcpy n'a que deux argments

Merci d'avance
0
dodo1309 Messages postés 218 Date d'inscription mercredi 17 mai 2006 Statut Membre Dernière intervention 30 mai 2011
19 févr. 2009 à 13:28
ah !! sa marche

Merci Bien
0