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 42 43 44 45 46 47
|
# include <stdio.h>
# include <stdlib.h>
# define INFILE "starabstracts.dat"
# define ARRAYSIZE 100
main ( )
{
FILE * fp;
/* tableau d'indexation qui va relever la position de chaque '*' */
long offset [ ARRAYSIZE ];
int c = 0;
char iline [ 81 ];
/* par defaut, le tableau est rempli de -1. */
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 );
}
/* Ce codage est infâme, mais il parcours le fichier en relevant la position de chaque '*' avec ftell(). La valeur (l'index de la donnée dans le fichier) est stockée dans le tableau au fur et à mesure en séquence. C'est ce qu'on appelle une 'indexation'. */
c = 0;
fgets ( iline, 81, fp );
while ( ! feof ( fp ) ){
if ( iline [ 0 ] == '*' ) {
offset [ c ] = ftell ( fp );
c ++;
}
fgets ( iline, 81, fp );
}
/* relecture du fichier par accès direct, avec fseek(), à la position de l'info */
for ( c = 0; offset [ c ] >= 0; c ++ ) {
fseek ( fp, offset [ c ], SEEK_SET );
fgets ( iline, 81, fp );
/* affichage en 'sautant' l'*' */
printf ( "%3d. %s", c + 1, iline );
}
} |
Partager