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).
1234
tress seullll :cry:
1234
jme sens seul :sweat:
1234
Je comprends de - en -. ftell me renvoie des valeurs negatives pour les premiers element du fichier.et avec fgetpos c la meme chose.
Code :
int main()
{
FILE *html;
char c;
fpos_t position;
html=fopen("c:/indice.txt","r" );
while(c!=EOF)
{
fgetpos(html,&position);
c=fgetc(html);
printf("%ld : %c\n",position,c);
}
fclose(html);
return 0;
}
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 :
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 :
long fsearch(char *chaine,FILE *fichier,long ptdepart)
{
int test=1,i=0;
long longueur=strlen(chaine);
char c;
fseek(fichier,ptdepart,SEEK_SET); //fixe le point de départ de la recherche
while(test==1)
{
test=fscanf(fichier,"%c",&c);
i=0;
while(c==*(chaine+i))
{
fscanf(fichier,"%c",&c);
i++;
}
if(i==longueur)
{
return ftell(fichier)-longueur-1;
}
}
return -1; //erreur chaine non trouvé
}
une idée un truc pour me mettre sur la voie ca serai cool je desespere, merci.