Soyez le premier à donner votre avis sur cette source.
Vue 14 132 fois - Téléchargée 790 fois
// SearchChar 2.0 // Auteur : oXo-Ig0r // Contact : oxo_um@yahoo.fr // Compilateur : Dev-C++ 4 // Description : recherche de chaîne de caractères dans un fichier #include <stdio.h> #include <string.h> char mot[100],file_t[150],newtext[10000]; //Fonction d'entrée du mot recherché int mot_recherche() { printf("\n\n> Mot recherch%c ? ",130); gets(mot); fflush(stdin); return 0; } //Fonction d'entrée du chemin du fichier int file_c() { printf("> Chemin d'acc%cs du fichier texte ? ",138); gets(file_t); fflush(stdin); return 0; } //Fonction principale main() { FILE *file; char s_read[100]; int l_mot=0,l_file=0,ref=0,t,b,n,decal=0; system("cls"); puts(".[ SearchChar 2.0 par Ig0r ].\n"); //Entrée du chemin du fichier file_c(); //Chemin du fichier trop long if(strlen(file_t)>150) { puts("\n> Chemin du fichier trop long : ERREUR"); puts("> Appuyez sur une touche pour continuer..."); getch(); main(); } //Ouverture en BINAIRE file=fopen(file_t,"rb"); //Erreur d'ouverture if (file==NULL) { puts("\n> Impossible d'ouvrir le fichier : ERREUR"); puts("> Appuyez sur une touche pour continuer..."); getch(); //On relance alors la fonction principale main(); } //Si l'ouverture a réussi else { //Il s'agit ici de compter combien d'octets contient le fichier //Un caractère étant codé sur 1 octet on aura donc le nombre de caractères du fichier //Le pointeur est initialement au début du fichier //Tant que l'on atteint pas la fin du fichier, //On place dans n un bloc du fichier de la taille d'un entier et on incrémente l_file //Le pointeur avance ainsi à chaque tour de la taille d'un entier (4 octets) //Il faudra donc multiplier l_file par 4 pour avoir le nombre d'octets et non de groupes de 4 octets while(!feof(file)) { n=getw(file); l_file++; } //On multiplie par 4 pour obtenir le nombre d'octets l_file=l_file*4; //On ferme fclose(file); //Ouverture en ASCII file=fopen(file_t,"r"); printf ("> Fichier trouv%c (%d caract%cres) : OK",130,l_file,138); } //Entrée du mot recherché mot_recherche(); //Longueur du mot l_mot=strlen(mot); //Erreur si la longueur du mot est nulle if ((!l_mot)||(l_mot>100)) { puts("\n> Mot incorrect (longueur nulle ou > 100) : ERREUR"); puts("> Appuyez sur une touche pour continuer..."); getch(); main(); } for (t=0;t<=(l_file-l_mot);t++) { //On place le pointeur à la position t (initialement nulle puis incrémentée) fseek(file,t,0); //On récupère l_mot caractères à partir de cette position //(autant de caractères que de caractères dans le mot) //Attention, le deuxième argument est 'l_mot+1' pour récupérer l_mot caractères ! fgets(s_read,l_mot+1,file); //Si les chaînes mot et s_read sont identiques if(!(strcmp(s_read,mot))) { //On incrémente alors ref (qui contient le nombre de chaînes identiques trouvées) ref++; //Dans newtext, on place un symbole spécial juste avant le mot //Le pointeur de newtext sera en avance sur le pointeur de file à cause de ce symbole //C'est pourquoi on compense celà par l'entier decal incrémenté à chaque introduction du caractère spécial //*(newtext+t+decal)=2; -> caractère de code ASCII = 2
22 juil. 2009 à 15:13
31 mai 2007 à 12:18
Merci d'avance.
22 mai 2007 à 14:59
3 févr. 2007 à 13:42
18 juin 2006 à 16:48
(dommage que ya pas une police de caractères plus grosse !)
C'EST GENIAL EXTRAORDINAIRE ABSOLUMENT GENIALISIME !!!!!
20/10 !!!!
Merci encore
C'est exactement ce que je cherchais
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.