[C/C++] mon ftell vise mal?

mon ftell vise mal? [C/C++] - Programmation

Marsh Posté le 11-08-2002 à 16:52:15    

Le but du programme est de rechercher une chaine de caractère dans un fichier et de renvoyer la position de cette chaine.  
mais evidenment  :o mon programme ne marche pas.
Il me retourne une valeur a coté de la bonne. Mais le resultat est tjrs approchant de la vérité cad a 1 ou 2 lignes max de la chaine(sur un fichier de 500lignes).
 
quand je commence ma recherche pres de l'endroit ou se trouve la chaine le resultat est bon mais si je commence loin ca va plus. :cry:  
 
 

Code :
  1. long fsearch(char *chaine,FILE *fichier,long ptdepart)
  2. {
  3. int test=1,i=0;
  4. long longueur=strlen(chaine);
  5. char c;
  6. fseek(fichier,ptdepart,SEEK_SET);    //fixe le point de départ de la recherche
  7. while(test==1)
  8. {     
  9.         test=fscanf(fichier,"%c",&c);
  10.         i=0;
  11.  while(c==*(chaine+i))
  12.         {        
  13.   fscanf(fichier,"%c",&c);
  14.   i++;
  15.         }
  16.         if(i==longueur)
  17.  {
  18.   return ftell(fichier)-longueur-1;
  19.  }
  20. }
  21. return -1; //erreur chaine non trouvé
  22. }


 
une idée un truc pour me mettre sur la voie ca serai cool je desespere, merci.

Reply

Marsh Posté le 11-08-2002 à 16:52:15   

Reply

Marsh Posté le 11-08-2002 à 18:53:01    

Je comprends de - en -. ftell me renvoie des valeurs negatives pour les premiers element du fichier.et avec fgetpos c la meme chose.

Code :
  1. int main()
  2. {
  3. FILE *html;
  4. char c;
  5. fpos_t position;
  6. html=fopen("c:/indice.txt","r" );
  7. while(c!=EOF)
  8. {
  9. fgetpos(html,&position);
  10. c=fgetc(html);
  11. printf("%ld : %c\n",position,c);
  12. }
  13. fclose(html);
  14. return 0;
  15. }


 
et voila ce que ca affiche!! :pt1cable:  
(position : caractère du fichier)
 
0 : a
-4 : b
-3 : c
-2 : d
-1 : e
0 : f
1 : g
2 : h
3 : i
4 : j
5 : k
6 :
 
8 : 1
9 : 2
10 : 3
11 : 4
12 : 5
13 : 6
14 : 7
15 : 8
16 : 9
17 :
 
allé merde et pti effort!! pas une idée?

Reply

Marsh Posté le 11-08-2002 à 18:59:36    

jme sens seul :sweat:

Reply

Marsh Posté le 11-08-2002 à 20:11:05    

tress seullll  :cry:

Reply

Marsh Posté le 11-08-2002 à 20:21:53    

tu lis ton fichier dans un buffer et recherches dans ce buffer. (+ rapide).
 
FILE* f = fopen("....", "rb");
int fileSize = chopper la taille du fichier (fseek & co)
char* buffer = malloc(sizeof(char)*fileSize);
fread(buffer, 1, fileSize, f);
 
char* search = "texte recherché";
 
char* tempIdx = strstr(buffer, search);
if (tempIdx)
{
  int position = tempIdx - buffer;
}
else
{
  // ... search non trouvé
}
 
fclose(...)
 
si le fichier est trop gros (> 64k par ex), il faudra faire une recherche itérative, tout en prenant soin des chaines recherchées coupées aux frontières (pile poil entre une limite 64k).

Reply

Marsh Posté le 11-08-2002 à 22:24:30    

ok merci :jap:  du conseil :)
 
avec le rb ca marche mieux.:D

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed