écrire un fichier

sebastienmz Messages postés 139 Date d'inscription mardi 16 mai 2006 Statut Membre Dernière intervention 23 juin 2008 - 14 sept. 2006 à 12:02
cs_AlexN Messages postés 694 Date d'inscription lundi 5 décembre 2005 Statut Membre Derniè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?

6 réponses

luhtor Messages postés 2023 Date d'inscription mardi 24 septembre 2002 Statut Membre Dernière intervention 28 juillet 2008 6
14 sept. 2006 à 13:23
ajoutes un flush lorque tu veux qu'il écrive sur le disque dur.


ofstream file(...);

file << "coucou" << flush;


Mais c'est normal qu'il écrive par paquets et non a chaque fois que tu ajoutes un mot ou un caractère.
0
sebastienmz Messages postés 139 Date d'inscription mardi 16 mai 2006 Statut Membre Dernière intervention 23 juin 2008
14 sept. 2006 à 13:30
en C sil te plait ...
0
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
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<!--
0
sebastienmz Messages postés 139 Date d'inscription mardi 16 mai 2006 Statut Membre Dernière intervention 23 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;
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_AlexN Messages postés 694 Date d'inscription lundi 5 décembre 2005 Statut Membre Dernière intervention 8 janvier 2014 18
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>

void usage (char **argv) {
    printf ("Usage : %s MotAChercher FichierSource FichierRésultat\n", **argv);
    exit (EXIT_SUCCESS);
}
void erreur (char *err, char *f) {

    char msg[100];
    sprintf (msg, "%s %s", err, f);
    perror(msg);
    exit (EXIT_FAILURE);
}

int main(int argc, char *argv[]) {

    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.
0
cs_AlexN Messages postés 694 Date d'inscription lundi 5 décembre 2005 Statut Membre Dernière intervention 8 janvier 2014 18
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...
0
Rejoignez-nous