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

  FORUM HardWare.fr
  Programmation
  C

  Simple lecture de fichier... [ RESOLU ]

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Simple lecture de fichier... [ RESOLU ]

n°1731213
jijiz
Posté le 13-05-2008 à 15:08:36  profilanswer
 

Bonjour à tous,
 
Je souhaite me balader dans mon fichier via la commande FSEEK et arrivé à un certain point, afficher les 100 caracteres suivants.
 
J'arrrive bien à me déplacer via FSEEK, cependant la seconde partie pêche : je n'arrive pas a afficher ces CENTanés prochains caractères.
NB : le fichier est correctement ouvert car j'ai réussi a faire d'autres lectures.
 
Un peu de code: :
 
 

Code :
  1. char tmp;
  2.    // Deplacement a l'endroit souhaité
  3.    while ( !fscanf(fic, "# Number of Points" ))
  4.    {
  5.  fseek(fic, 1, SEEK_CUR);
  6.    }
  7.    // On affiche 100 caracteres DEBUG  
  8.    for (i = 0;i < 100; i++)
  9.    {
  10.  fscanf (fic , "%c", &tmp);
  11.  printf("%c", tmp);
  12.    }
  13.    getchar();


 
Le resultat sont des points interrogation style code ascii (? avec un fond blanc et rond).
 
 
Merci pour votre aide.


Message édité par jijiz le 14-05-2008 à 14:08:17
mood
Publicité
Posté le 13-05-2008 à 15:08:36  profilanswer
 

n°1731231
Taz
bisounours-codeur
Posté le 13-05-2008 à 15:56:08  profilanswer
 

regarde le retour de fscanf toujours

n°1731253
Taz
bisounours-codeur
Posté le 13-05-2008 à 16:42:49  profilanswer
 

ta méthode avec le fscanf n'est pas bonne, puis que fscanf n'a rien à scanner et retourne donc toujours 0 ...
 
Tu ferais mieux de lire ligne par ligne avec fgets, et rechercher avec strstr ta chaine.

n°1731255
Taz
bisounours-codeur
Posté le 13-05-2008 à 16:43:27  profilanswer
 

jijiz a écrit :

eedit : est-il possible de donner en paramètre le numero de ligne où l'on souhaite se positionner au lieu du nombre d'octets.

normal, une ligne c'est juste une vue de l'esprit, c'est une suite de caractères dont le dernier est un \n

n°1731260
Taz
bisounours-codeur
Posté le 13-05-2008 à 16:55:49  profilanswer
 

comme d'habitude ... regarde le retour de fgets. Aucun problème avec un

Code :
  1. char line[....];
  2. while (fgets(line, sizeof line, input) { }


 
Attention aussi à regarder si la line contient un \n final, sinon c'est que la ligne est trop longue pour le buffer.

n°1731275
Taz
bisounours-codeur
Posté le 13-05-2008 à 17:18:31  profilanswer
 

...

Code :
  1. while (fgets(chaine, sizeof chaine, f)) {
  2. // gérer le cas ou la ligne est trop longue
  3. if (strstr(chaine, "# Number of Points" )) {
  4.    // trouvé
  5.   }
  6. }

Message cité 1 fois
Message édité par Taz le 13-05-2008 à 17:19:42
n°1731277
Taz
bisounours-codeur
Posté le 13-05-2008 à 17:21:38  profilanswer
 

bon RTFM, je perds patience.
 
Ta méthode du seek est pourrie. Tu dois lire ton fichier jusqu'à trouver la chaine que tu veux dedans: tu peux faire ça avec fgetc, fread ou fgets. Sauf à coder 337 fgets pour atteindre ta ligne, je vois pas comment se passer de while.

n°1731442
jijiz
Posté le 14-05-2008 à 07:31:44  profilanswer
 

ah et dans le while je compare ma chaine a ce que je dois trouvé donc?? Si tu peux/veux réponds à cette dernier question et j'éfface le topic.
Désolé je ne suis pas un l337 de la prog, je suis plutot "algorithmes".


Message édité par jijiz le 14-05-2008 à 07:34:26
n°1731695
jijiz
Posté le 14-05-2008 à 14:07:44  profilanswer
 

ok j'ai tout cassé et tout refait ca marche. Un bou de code pour ceux que ca pourrait interesser plus tard :
 
 

Code :
  1. int main(int argc,char **argv)
  2. {
  3.    char *tampon;
  4.    int i;
  5.    int i_tmp;
  6.    i = 0;
  7.    i_tmp = 0;
  8.    size_t *n;
  9.    if (tampon = malloc(100*sizeof(char)))
  10.    {
  11.       printf("malloc good\n" );
  12.    }else
  13.    {
  14.       printf("malloc error\n" );
  15.    }
  16.    FILE *fic = fopen("/home/julien/rectified4.pts", "r" );
  17.    if (fic)
  18.    {
  19.       // TRAITEMENT DES DONNES DE L IMAGE DE GAUCHE
  20.       fgets(tampon, 100, fic);
  21.       // On place la tete de lecture juste apres la chaine "# Number of Points\n"
  22.       while (strcmp(tampon, "# Number of Points\n" ) != 0)
  23.       {
  24.          fgets(tampon, 100, fic);
  25.       }
  26.       // Recuperation du nombre de points contenus dans l'image de gauche
  27.       fscanf(fic,"         %d",&i_tmp);
  28.       // TRAITEMENT DES DONNES DE L IMAGE DE DROITE
  29.       fgets(tampon, 100, fic);
  30.       // On place la tete de lecture juste apres la chaine "# Number of Points\n"
  31.       while (strcmp(tampon, "# Number of Points\n" ) != 0)
  32.       {
  33.          fgets(tampon, 100, fic);
  34.       }
  35.       // Recuperation du nombre de points contenus dans l'image de droite
  36.       fscanf(fic,"         %d",&i_tmp);
  37.       printf("Nombre de pts de l image de droite ! %d\n",i_tmp);
  38.    }else
  39.    {
  40.       printf("Fichier non trouve\n" );
  41.    }
  42. }


 
 
Fichier du type :
 

CIP
#World to TCP
      0.00000     -0.00000      0.00000     -0.00000     -0.00000     -0.00000
#
# LEFT CAMERA
#
# WIDTH  HEIGHT
        1280        1024
#  
# Number of Points
         3
# GRID Coordinates            PIXEL Coordinates
# x    y    z                  x          y
     -360.000     -360.000      0.00000      662.821      433.052
     -320.000     -360.000      0.00000      690.971      431.816
     -280.000     -360.000      0.00000      719.582      430.623
 
#
# RIGHT CAMERA
#
# WIDTH  HEIGHT
        1280        1024
#  
# Number of Points
         5
# GRID Coordinates            PIXEL Coordinates
# x    y    z                  x          y
     -360.000     -360.000      0.00000      597.103      422.370
     -320.000     -360.000      0.00000      624.528      420.832
     -280.000     -360.000      0.00000      652.567      419.463
     -240.000     -360.000      0.00000      681.319      418.252
     -200.000     -360.000      0.00000      710.531      416.756


n°1731778
Taz
bisounours-codeur
Posté le 14-05-2008 à 15:09:16  profilanswer
 

c'est idiot ça, je t'ai montré le code, expliqué qu'il faut vérifier le retour de fgets, vérifier que la ligne contient bien un '\n', et non, tu veux pas.

mood
Publicité
Posté le 14-05-2008 à 15:09:16  profilanswer
 

n°1731811
jijiz
Posté le 14-05-2008 à 15:44:54  profilanswer
 

Taz a écrit :

c'est idiot ça, je t'ai montré le code, expliqué qu'il faut vérifier le retour de fgets, vérifier que la ligne contient bien un '\n', et non, tu veux pas.


écoute, je n'ai pas compris ton explication et tu m'as annoncé RTFM, j'ai RTFM et trouvé cette solution qui marche et postée car c'est la moindre des choses. Donc maintenant le topic est clos. Je n'ai pas le temps de pinailler sur une autre solution.
 
"Ca c'est idiot, ma méthode avec fseek est pourrie".... Hmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm  :kaola: Bref tu es trop fort et légerement pédant. Désolé mais je n'ai pas ton niveau. Sur ce BONNE JOURNEE (suis un poil vexé).


Message édité par jijiz le 14-05-2008 à 17:53:01
n°1732072
Taz
bisounours-codeur
Posté le 15-05-2008 à 09:56:27  profilanswer
 

il faut en vouloir pour traduire ça
 

Taz a écrit :

...

Code :
  1. while (fgets(chaine, sizeof chaine, f)) {
  2. // gérer le cas ou la ligne est trop longue
  3. if (strstr(chaine, "# Number of Points" )) {
  4.    // trouvé
  5.   }
  6. }



 
en ça
 

Code :
  1. // On place la tete de lecture juste apres la chaine "# Number of Points\n"
  2.       while (strcmp(tampon, "# Number of Points\n" ) != 0)
  3.      {
  4.         fgets(tampon, 100, fic);
  5.      }



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

  Simple lecture de fichier... [ RESOLU ]

 

Sujets relatifs
Un tableau qui agrandit les cases [Resolu][OPenLaszlo] Afficher des boutons en x,y en fct de fichier xml
copier/coller entre fichier excelscript linux qui permet de vérifier une valeur dans un fichier .conf
(Résolu) Erreur caractère[Résolu] contenu de $_POST bizarre
Lecture du code source d'une page web ouverte dans IE[Résolu]Tester champs NULL sous access, étrange
[Résolu] XSLT 2.0 dans PHP avec SaxonLire un fichier texte en J2ME
Plus de sujets relatifs à : Simple lecture de fichier... [ RESOLU ]


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