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

  FORUM HardWare.fr
  Programmation

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

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

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

n°193722
1234
t'as mal aux yeux ?
Posté le 11-08-2002 à 16:52:15  profilanswer
 

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.

mood
Publicité
Posté le 11-08-2002 à 16:52:15  profilanswer
 

n°193736
1234
t'as mal aux yeux ?
Posté le 11-08-2002 à 18:53:01  profilanswer
 

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?

n°193737
1234
t'as mal aux yeux ?
Posté le 11-08-2002 à 18:59:36  profilanswer
 

jme sens seul :sweat:

n°193751
1234
t'as mal aux yeux ?
Posté le 11-08-2002 à 20:11:05  profilanswer
 

tress seullll  :cry:

n°193753
youdontcar​e
Posté le 11-08-2002 à 20:21:53  profilanswer
 

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).

n°193783
1234
t'as mal aux yeux ?
Posté le 11-08-2002 à 22:24:30  profilanswer
 

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


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

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

 

Sujets relatifs
Plus de sujets relatifs à : [C/C++] mon ftell vise mal?


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)