MissZaza Posté(e) le 31 mai 2005 Partager Posté(e) le 31 mai 2005 Tu peux enlever "iostream", j'avais pas fait gaffe en collant le texte. Si tu as d'autres erreurs de compilation, il faut ajouter <string.h.>. Quand tu exécutes le programme, tu as bien une console qui s'ouvre et on te demande un mot ? Normalement en sortie, le fichier est le même sauf que le mot que tu as donné est mis en gras, s'il est trouvé dans le document, bien sûr ! S'il n'est pas trouvé, tu auras exactement le même fichier qu'en entrée. Lien vers le commentaire Partager sur d’autres sites More sharing options...
m00t Posté(e) le 31 mai 2005 Partager Posté(e) le 31 mai 2005 Manque pas le .h à iostream en fait (d'où l'erreur de compil ^^ ) ? Lien vers le commentaire Partager sur d’autres sites More sharing options...
astero-H Posté(e) le 31 mai 2005 Partager Posté(e) le 31 mai 2005 $ cat test.cpp #include <iostream.h> int main() { return(0); } $ gcc test.cpp (...) #warning This file includes at least one deprecated or antiquated header. Please consider using one of the 32 headers found in section 17.4.1.2 of the C++ standard. Examples include substituting the <X> header for the <X.h> header for C++ includes, or <iostream> instead of the deprecated header <iostream.h>. To disable this warning use -Wno-deprecated. (...) Oui Oui, iostream.h est marqué DEPRECATED !? (d'après le standard C++, pas d'après visual-c++...) va falloir oublier les .h pour le cpp... :( j'aime pas qu'on change mes habitudes !!! Lien vers le commentaire Partager sur d’autres sites More sharing options...
Galdor Posté(e) le 31 mai 2005 Partager Posté(e) le 31 mai 2005 Un conseil, pour du traitement de caractères, ça serait beaucoup plus simple, puissant et flexible d'utiliser du perl et d'y aller à grands coups de regex. Lien vers le commentaire Partager sur d’autres sites More sharing options...
Samus Posté(e) le 31 mai 2005 Auteur Partager Posté(e) le 31 mai 2005 Tiens yen a un qui m'a suivi Bref j'ai rendu un truc imcomplet mias je dois finir ce programme quand même. Il faut au moins que je comprenne comment faire. En fait mon énoncé à moi est peu clair : les couples de balises inutiles style <font></font>, je pensais que c'etait les blaises qui n'avaient pas besoin d'etre ferméés, mais jen ai parle avec un pote et lui a compris que cetait tout simplement les balises vides qu'il fallait supprimer. Je me renseigne et je vous en dis plus Comme l'a dit ashley, on veut pas abuser, mais la on est vraiment à l'ouest, et on est pas en école d'inge... on galere vraiment Merci de votre aide :) Lien vers le commentaire Partager sur d’autres sites More sharing options...
m00t Posté(e) le 31 mai 2005 Partager Posté(e) le 31 mai 2005 Moi aussi j'ai compris que c'etait les balises vides à supprimer <></> Le principe, dès que tu trouve un caractère '<' dans ton buffer, tu stock le nom de la balise jusqu'à trouver '>'. Et si derrière tu retrouve '</', tu recupere encore le nom et tu compare. Si les noms sont les mêmes, tu ne recopie pas dans ton fichier de sortie, sinon, ben si ^^ Lien vers le commentaire Partager sur d’autres sites More sharing options...
magnig Posté(e) le 31 mai 2005 Partager Posté(e) le 31 mai 2005 Pour le truc de mettre en gras : T'es un copain de Samus ? He les mecs, il faudrait peut-être faire vos devoirs tout seul On veut bien donné un coup de main, mais faut pas abuser... Le prog que tu donnes est correct mais si tu débutes en C, celui-ci est plus simple à comprendre ( ne t'embêtes avec des buffers si tu n'en n'as pas l'utilité ): Autrement, tu peux très bien adapter le code que tu as en reprenant la boucle sur le buffer et non sur le fichier. Tu lis les carctères du buffer et tu compares avec ton mot à trouver. Le code que tu donne est completement (j'exgère u peu) faux, là tu lit à chaque tour de boucle un paquet de caractères de longueur du mot recherché, petite demonstartion : "voici une phrase au pif" phrase : 6 caractères, on recherche ce mot dans la phrase precedente : premier passage dans la boucle : "voici " (5 letrres + espace) "voici " != phrase -> c'est pas bon deuxième passage : on relit 6 caractères comme indiqué dans ton code "une ph" != phrase troisième "rase a" != phrase pas la peine de continuer, ton truc a à peu près 1 chance sur 100 000 de fonctionner si jamais par chance au début d'un tour de boucle on se trouve juste avant le mot recherché donc voilà tout ça pour dire que effectivement si tu as choix les expressions régulières seraient certainement plus simples, sinon il faut analyser tou le fichier et comparer les mots et non les groupes decaractères, donc un truc du style, tant que le caractère courant lu est different de espace, je l'ajoute au mot en cours, sinon si c'est un espace je compare toute les lettres precedentes ajoutées - au mot recherché. et puis de toute façon il y aurait peut-être eu aussi un problème du fait que le mot lu ne contient pas" \0" alors que le mot saisit au clavier doit l'avoir, donc avant de comparer les chaines il faudra peut-être ajouter "\0" à celle lue dans le fichier. Lien vers le commentaire Partager sur d’autres sites More sharing options...
MissZaza Posté(e) le 31 mai 2005 Partager Posté(e) le 31 mai 2005 OK Magnig, j'ai fait une grosse bêtise... Il a bien sûr raison, mon prog ne fonctionnera pas ou avec beaucoup de chance. Pour le "\0", il n'y en a pas dans le mot à chercher car la fonction gets ne le récupère pas. Pour trouver le mot, tu fais comme dit magnig, il faut lire les caracteres, les stocker, et ensuite le comparer à ton mot caractere par caractere. C'est un poil plus compliqué que ce que j'avais fait... Désolée de t'avoir induit en erreur, j'ai fait ça vite et il était tard... Oui je cherche des excuses. Allez, je vais me cacher Lien vers le commentaire Partager sur d’autres sites More sharing options...
Ashley Posté(e) le 31 mai 2005 Partager Posté(e) le 31 mai 2005 MissZaza, je viens de réessayer ton programme ce matin, il fonctionne en partie on va dire.Quand je lui demande de chercher un des deux premiers mots, il les affiche en gras dans myfileOut.html mais quand je lui demande de chercher un mot se situant plus loin il ne m'affiche rien en gras. J'ai compris le problème que Magnig a décrit mais je ne sais pas comment le rectifier, je veux dire je ne sais pas comment ça se traduit en code. Ps:Tu n'as pas à t'excuser pour ton erreur, c'est déja sympa de nous aider et puis ça me fait comprendre comment le C fonctionne. Lien vers le commentaire Partager sur d’autres sites More sharing options...
MissZaza Posté(e) le 31 mai 2005 Partager Posté(e) le 31 mai 2005 Ce code devrait fonctionner, à vérifier : #include <stdio.h>#include <stdlib.h> int main(int argc, char *argv[]) { // Déclarations char mot[256]; char tmp[256]; int r; int taille; long pos; char c; //Ouverture des fichiers en lecture et écriture FILE *file = fopen("myfile.html","r"); FILE *fileOut = fopen("myfileOut.html","w+"); if (file==NULL) perror ("Error opening file"); else { printf("Mot a rechercher :"); // Demande du mot à rechercher gets (mot); // Récupération du mot taille = strlen(mot); // taille = nombre de lettres de mot // Boucle sur le fichier do { pos = ftell ( file ); // Sauvegarde de la position c = fgetc(file); // Lecture d'un caractere if ( c == mot[0] ) { fseek (file,pos,SEEK_SET); // Retour à la position précédente fgets (tmp , taille+1, file); // Lecture de (taille+1) caracteres r = strcmp(tmp,mot); // Comparaison avec le mot a trouver if ( r==0 ) { // Le mot est le bon, il faut l'ecrire dans le fichier en gras fputs ("<B>", fileOut); fputs (tmp, fileOut); fputs ("</B>", fileOut); fseek (file,pos+taille,SEEK_SET); // On pointe sur la position de depart + taille du mot } else { // Le mot n'est pas le bon, on ecrit juste le caractere fputc (c, fileOut); // Ecriture du caractere fseek (file,pos+1,SEEK_SET); // On pointe sur la position de depart + 1 caractere } } else fputc (c, fileOut); // Ecriture du caractere } while (c!=EOF); } system("PAUSE"); return 0; } Par contre, cela va également trouver les sous-chaines, si tu cherches "le" et que ton texte est "le programme est lent", il va te trouver "le programme est lent". Il ne va détecter non plus les majuscules, pour cela il faudrait ajouter des comparaisons. C'est ma dernière proposition en espérant que c'est correct. A+. Lien vers le commentaire Partager sur d’autres sites More sharing options...
m00t Posté(e) le 31 mai 2005 Partager Posté(e) le 31 mai 2005 Avec "StrCmpI" la comparaison n'est pas "case sensitive" et donc le probleme des majuscules est résolu. Et de plus pas de probleme de sous chaines puisque StrCmp ne repond 0 que si les chaines sont identiques je crois. Lien vers le commentaire Partager sur d’autres sites More sharing options...
Starbetrayer Posté(e) le 31 mai 2005 Partager Posté(e) le 31 mai 2005 bon courage pr les c developpez.com est un tres bon site Lien vers le commentaire Partager sur d’autres sites More sharing options...
Ashley Posté(e) le 31 mai 2005 Partager Posté(e) le 31 mai 2005 Voilà, c'est envoyé! Je vous remercie tous, et plus particulièrement MissZaZa, c'est très sympa de nous aider comme tu l'as fait. J'ai essayé le programme tout à l'heure, il trouve tous les mots sauf ceux qui ont des accents apperement, mais c'est pas grave, c'est déja pas mal. Maintenant je vais me débrouiller pour comprendre comment marche le code, et pourquoi pas l'améliorer. Encore merci. Lien vers le commentaire Partager sur d’autres sites More sharing options...
an0nyme Posté(e) le 1 juin 2005 Partager Posté(e) le 1 juin 2005 pour traiter du HTML (propre ) j'aurais plutôt utilisé DOM et sinon j'aurais plutôt utilisé du Perl Lien vers le commentaire Partager sur d’autres sites More sharing options...
ubik Posté(e) le 6 juin 2005 Partager Posté(e) le 6 juin 2005 Pas de bol les mecs, y a plein de langages qui prennent les regex (Perl, Java, PHP...) et qui vous traiteraient ca en 5 lignes à tout casser... M'enfin on dirait que vous etes obligés de faire ca sous C Lien vers le commentaire Partager sur d’autres sites More sharing options...
Messages recommandés
Archivé
Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.