Bonjour j'aimerais quelques explications sur comment utiliser ftell() et fseek() car j'ai un peu de mal a les comprendre.

Le programme suivant lis d'un fichier qui contient des articles. Au debut de chaque article il y a un titre, et entre chaque article il y a une etoile. Le programme lis les titres et les imprime sur l'ecran.

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
41
 
# include <stdio.h>
# include <stdlib.h>
 
# define   INFILE   "starabstracts.dat" 
# define   ARRAYSIZE    100
 
main ( )
{
  FILE * fp;
  long offset [ ARRAYSIZE ];
  int c = 0;
  char iline [ 81 ];
 
  for ( c = 0; c < ARRAYSIZE; c ++ )
    offset [ c ] = -1;
 
  system ( "clear" );
  if ( ( fp = fopen ( INFILE, "r"  ) ) == NULL ) {
    printf ( "Unable to open %s!\n\n", INFILE );
    perror ( INFILE );   
    exit ( 1 );
    }
 
  c = 0;    
  fgets ( iline, 81, fp );
  while ( ! feof ( fp )  ){
    if ( iline [ 0 ] == '*' ) {  
      offset [ c ] = ftell ( fp ); 
      c ++;
      }  
    fgets ( iline, 81, fp );
    }    
 
  for ( c = 0; offset [ c ] >= 0; c ++ ) {
 
    fseek ( fp, offset [ c ], SEEK_SET );
    fgets ( iline, 81, fp );
    printf ( "%3d. %s", c + 1, iline );  
    }
}
Le resultat contient rien qu'une liste des titres d'articles.

Le probleme c'est que meme si j'ai le code je ne comprend pas comment cela a ete fait.

Est ce que quelqu'un pourrait m'expliquer un peu le role de l'array "offset" et des for loop qu'on voit dans le code.

Aussi, comment les 2 fonctions fseek et ftell pourraient me servir pour ecrire un programme qui lis d'un fichier et exclu des lignes qui contiennent des strings qu'on connait a l'avance. Qui seront generalement des "tags" entre <>