sebastienmz
Messages postés139Date d'inscriptionmardi 16 mai 2006StatutMembreDernière intervention23 juin 2008
-
14 sept. 2006 à 12:02
cs_AlexN
Messages postés694Date d'inscriptionlundi 5 décembre 2005StatutMembreDernière intervention 8 janvier 2014
-
16 sept. 2006 à 03:14
bonjour TOut le MOnde
jai faite un programme de traitement de texte avec dev cpp et ma question est : Je lance mon programme ... je dit d'écrire dans un fichier .. mais il écrit le fichier quand le programme se ferme et pas quand il devrait l'écrire !
Qu'es qui ce passe?
SAKingdom
Messages postés3212Date d'inscriptionlundi 7 novembre 2005StatutMembreDernière intervention16 février 200915 14 sept. 2006 à 14:21
Quand le programme se ferme uniquement? Tu utilise fopen? Si oui, a tu ajouté fclose quand tu as fini avec le fichier? Sinon, c'est sûr qu'il y aura problème.
C++ (@++)
___________________________________________
Les plus grands esprits trouvent toujours une solution<!--
sebastienmz
Messages postés139Date d'inscriptionmardi 16 mai 2006StatutMembreDernière intervention23 juin 2008 14 sept. 2006 à 15:36
oui jutilise fopen et il y a un close quand j'ai plus besoin d'écrire dans mon fichier je vous passe le code
:
FILE *file;// créé une variable ressource
int temp; //variable temp pour getw
int sizeFile=0; //taille du fichier
int sizeMot=0; //taille du mot a rechercher
char motSeek[100]; //mot a rechercher
char fRead[100]; //fichier lu
int nbFind=0; //nombre de fois trouvé
int i; //pour le for
char fin[100];
file=fopen("C:\\log.txt","rb"); //on ouvre le fichier en binaire
while (!feof(file)) { //on trourne jusqu'a la fin du fichier
temp = getw( file ); //on li le fichier
printf( "%d \n",temp);
sizeFile++; //on incrémente la taille du fichier
}
printf(" %d",sizeFile);
sizeFile = sizeFile *4; //on convertis les bit en octet
printf(" %d",sizeFile);
close(file); // on ferme le fichier
file=fopen("C:\\log.txt", "r"); //on ouvre le fichier en lecture seul
printf("\n\n> Mot recherch%c ? ", 130); //on affiche
gets(motSeek); //on lit le mot qui faut chercher
fflush(stdin); //on vide le buffer du clavier
sizeMot= strlen( motSeek ); //la taille du mot a rechercher
for (i = 0; i <= (sizeFile - sizeMot); i++) { //on tourne
fseek(file,i,0); //on place de pointer sur le fichier avec l'offest de i
fgets(fRead, sizeMot+1, file); // on lit le un mot
if(! ( strcmp(fRead, motSeek) ) ) { //on compare le mot lu et le mot rechercher
nbFind++; // on incrémente
}
}
close(file);
file=fopen("C:\\log2.txt", "w"); //on ouvre le log2.txt en mode écriture
fseek(file,0,0); //on pojnte sur le début du fichier
sprintf(fin, "Nombre de fois trouvé : %d \n", nbFind); //dans f on met nombre de fois trouvé : nbfind
fputs(fin,file); //on écrit dans log2.txt
fflush(stdout);
close(file);
//on vide le buffer du clavier
printf(" %d",nbFind); //on afficher combien de fois trouvé
system("PAUSE");
return 0;
Vous n’avez pas trouvé la réponse que vous recherchez ?
cs_AlexN
Messages postés694Date d'inscriptionlundi 5 décembre 2005StatutMembreDernière intervention 8 janvier 201418 15 sept. 2006 à 02:05
Je te propose une version qui me semble plus courte, pas forcément plus efficace mais moins il a de lignes, plus les erreurs sont groupées :
// Compte le nombre d'occurences d'un mot dans un fichier
// Un mot est une suite de caractères alphabétiques (a-zA-Z) encadrée par deux caractères parmi
// le debut de fichier, la fin de fichier ou un caractère non-alphabétique
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
FILE *f;
char *mot; int i 0, occ 0, c;
char rep[100];
if ( argc != 4 ) usage(argv);
if ( !(mot = (char *) malloc (strlen(argv[1]) + 1)) ) { perror("malloc"); exit (EXIT_FAILURE); }
if ( !strcpy (mot, argv[1]) ) { perror("strcpy"); exit (EXIT_FAILURE); }
// Ouvrir le fichier source
if ( !(f = fopen (argv[2], "r")) ) erreur("Problème pour ouvrir en lecture le fichier", argv[2]);
// Compter
while ( ( c = fgetc (f) ) != EOF ) { // c'est long
if ( !mot[i] && !isalpha(c) ) { occ++; i = 0; } // Trouvé ! else if ( c !mot[i] ) i 0;
else i++;
}
if ( fclose(f) == EOF ) erreur("Problème pour fermer le fichier", argv[2]);
// Ouvrir le fichier cible
if ( !(f = fopen (argv[3], "w")) ) erreur("Problème pour ouvrir en écriture le fichier", argv[3]);
sprintf (rep, "Mot '%s' trouvé %d fois dans le fichier %s.\n", mot, occ, argv[2]);
free(mot);
if ( fputs(rep, f) == EOF ) { perror("fputs"); exit (EXIT_FAILURE); };
if ( fclose(f) == EOF ) erreur("Problème pour fermer le fichier", argv[3]);
// Resultats
puts(rep);
// sprintf (rep, "cat %s", argv[3]);
// system (rep);
return EXIT_SUCCESS;
}
Si tu veux les accents et d'autres exotismes, tu modifies la condition dans le while pour inclure les caractères que tu veux inclure dans tes mots.
Le debut et la fin c'est du décor, le milieu c'est la partie qui compte.
cs_AlexN
Messages postés694Date d'inscriptionlundi 5 décembre 2005StatutMembreDernière intervention 8 janvier 201418 16 sept. 2006 à 03:14
petite correction :
printf ("Usage : %s MotAChercher FichierSource FichierRésultat\n", *argv);
au lieu de
printf ("Usage : %s MotAChercher FichierSource FichierRésultat\n", **argv);
La version avec deux étoiles provoque une erreur de segmentation en voulant afficher les usages.
Non contente d'insulter l'utilisateur qui se trompe dans les arguments, cette fonction plante le programme pour être sûre qu'il ne bossera pas...