begin process at 2012 05 30 08:06:21
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C

 > 

Divers

 > 

Débutant(e)

 > 

union de deux fichiers


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

union de deux fichiers

samedi 19 septembre 2009 à 10:35:20 | union de deux fichiers

boualiasma

Bonjour,

Je voulais ajouter autres lignes (autres données) à la fin du fichier 'output.txt' à partir d'un autre fichier 'exp.txt'

le contenu de fichier 'input.txt':

lundi
mardi
mercredi
jeudi


le contenu de fichier 'exp.txt':

juin
septembre
Octobre




Je voulais obtenir comme résultat dans le fichier 'output.txt' et son contenu est :

lundi
mardi
mercredi
jeudi
juin
septembre
Octobre




Voici une partie de 'main':

Code C/C++ :
#include <windows.h>

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
FILE *fp_input, *fp_output,*fp_exp;

fp_input= fopen("input.txt","r");
fp_res= fopen("exp.txt","r");
fp_output= fopen("output.txt","w");

CopyFile("input.txt", "output.txt", FALSE);


return 0;
}



comment je vais le compléter le contenu de fichier 'exp.txt' dans 'output.txt' ?
sachant si à chaque fois on lance l'exécution de ce programme alors on obtient un nouveau fichier 'output.txt' indépendant de ancien contenu de l'exécution précédente.

Merci.

samedi 19 septembre 2009 à 12:07:56 | Re : union de deux fichiers

boualiasma

Bonjour,
les deux fichiers 'input.txt' et 'exp.txt' existe déjà et ils sont crées.

je voulais si à chaque fois on lance l'exécution de ce programme alors on obtient un nouveau fichier 'output.txt' indépendant de ancien contenu de l'exécution précédente c'est à dire on écrase l'ancien contenu.

Quel mode d'ouverture de fichier à choisir et qui est adapté à mon problème ?

quelle est la différence entre le mode "a" et "a+" ?

Voici mon essai mais il n'est pas complète:

Code C/C++ :

#include <windows.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
FILE *fp_output,*fp_exp;
char s[100];

CopyFile("input.txt", "output.txt", FALSE);

fp_exp= fopen("exp.txt","r");

fp_output= fopen("output.txt","a");

fprintf(fp_output,"\n");

while(fgets(s,100,fp_exp))

fprintf(fp_output,"%s",s);

fclose(fp_output);
flcose(fp_exp);
return 0;

}



Que proposez vous ?

Merci.

samedi 19 septembre 2009 à 18:37:06 | Re : union de deux fichiers

mezaya


Pour la copie de ton fichier à la place des fgets et fprintf

Code C/C++ :
while( !feof(fp_exp) )

{
char buffer[4096];
unsigned int read = fread( buffer, fp_exp, 1, 4096 );
unsigned int write = fwrite( buffer, fp_output, 1, read );

if( read != write )
{
/* gestion erreur ecriture */
}
}


Voili,Voilou

samedi 19 septembre 2009 à 19:11:26 | Re : union de deux fichiers

boualiasma

Bonsoir,

c'est quoi fread et fwrite ? quelle est la différence par rapport au fgets et fprintf ?

Pouvez vous mettez la solution complète ?

Merci.

samedi 19 septembre 2009 à 21:04:28 | Re : union de deux fichiers

mezaya


le fread et fwrite permet de lire et écrire dans des fichiers grâce à des buffers. ça évite ainsi de lire octet par octet un fichier (ce que fait fgets) et qui est extrêmement long.

donc le code devient :

#include <windows.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

Code C/C++ :
int main()

{
FILE *fp_output,*fp_exp;
char s[100];
// CopyFile("input.txt", "output.txt", FALSE); // ???
fp_exp= fopen("exp.txt","r");
fp_output= fopen("output.txt","a");
fprintf(fp_output,"\n");
while( !feof(fp_exp) )
{
char buffer[4096];
unsigned int read = fread( buffer, fp_exp, 1, 4096 );
unsigned int write = fwrite( buffer, fp_output, 1, read );
if( read != write )
{
/* gestion erreur ecriture */
}
}
fclose(fp_output);
flcose(fp_exp);
return 0;
}


Voili,Voilou

samedi 19 septembre 2009 à 21:21:16 | Re : union de deux fichiers

boualiasma

Bonsoir,

char buffer[4096];



- Comment la taille de 'buffer' est fixée ?
- Est ce que 'buffer' présente tout le contenu de fichier ?

if( read != write )

{

/* gestion erreur ecriture */

}



- ce test correspond à quoi ? et que'est ce que je mis comme gestion des erreurs ?


Je voulais copier le contenu de fichier 'input.txt' dans le fichier 'output.txt' puis compléter ce fichier 'output.txt' par le contenu de fichier 'exp.txt' .

Est ce que on va utiliser autre buffer ? quelle est la modification apporté sur la solution au dessus ?

Merci.

samedi 19 septembre 2009 à 21:47:12 | Re : union de deux fichiers

mezaya


je le refais avec les commentaires

Code C/C++ :

void CopieDefichierEntier( FILE* parInput, FILE* parOutput ) // cette fonction copie tout le contenu de parInput dans parOutput
{
while( !feof(fp_exp) ) // feof return 0 si on as pas encore atteint la fin du fichier est (!=0) sinon
{
char buffer[4096];
// on lit 4096 octets qui se trouve dans le fichier que l'on met dans buffer
// la fonction fread renvoie le nombre d'octets effectivement lus
unsigned int read = fread( buffer, fp_exp, 1, 4096 );
// on écrit dans le fichier output le buffer que l'on vient de lire dans le fichier input
// la fonction fwrite retourne le nombre d'octet effectivement écrit
unsigned int write = fwrite( buffer, fp_output, 1, read );
// si on as pas écrit le même nombre d'octet que l'on a lus c'est qui c'est passé une erreur lors de l'écriture
if( read != write )
{
// gestion erreur d'ecriture. exemple :
fprintf( "Erreur ecriture fichier !!" );
exit(0);
}
// on boucle jusqu'a ce que tout le fichier input soit copier dans output
}
}

int main()
{
FILE *fp_input,*fp_output,*fp_exp;

// ouverture des différent fichiers
fp_input = fopen("input.txt","r" ); // ouverture en lecture
fp_exp = fopen("exp.txt","r"); // ouverture en lecture
fp_output= fopen("output.txt","w");// ouverture en écriture supprime le contenu si il existe

// copie du 1er fichier input dans output
CopieDefichierEntier( fp_input, fp_output );
// copie du 2eme fichier exp dans output
CopieDefichierEntier( fp_exp, fp_output );

// on ferme propement tous les handles de fichier ouvert
fclose(fp_input);
flcose(fp_exp);
fclose(fp_output);

return 0;

}


j'espere que ça a répondu a tes question.
je te conseille ce cours de C/C++ de Christian Casteyde très complet Cours C/C++

Voili,Voilou

dimanche 20 septembre 2009 à 00:46:52 | Re : union de deux fichiers

boualiasma

Merci beaucoup.

Mais la question qui se pose comment choisir la taille de 'buffer' ? c'est à dire en fonction de quoi ?

votre choix 4096 est au hasard ou bien est calculé ?

Merci.

dimanche 20 septembre 2009 à 10:33:20 | Re : union de deux fichiers

mezaya


le choix du buufer est lié à la taille des clusteurs du systeme de partition (NTFS, FAT32, ext3, ... ).
sous windows les tailles de cluster par défaut font 4Ko pour le FAT32 et NTFS.

un peu de doc sur les clusteurs

Voili,Voilou



Cette discussion est classée dans : fichier, txt, output, quote, fp


Répondre à ce message

Sujets en rapport avec ce message

enregister les resultats dans un fichier txt. [ par ekinoks ] j'essepaire que vous allé pouvoir m'evité le susside:-/c'est un decrypeteur de fichier, j'aimeré enregistré tout les resultat dans un fichier TXT com probleme pour ecrire dans un fichier en C [ par kekobaron ] Bonjour,Je suis novice en C et je suis confronté à un probleme. Je souhaite enregistrer une phrase dans un fichier mais seul le premier mot est enregi Lecture de fichier TXT [ par beb30 ] Voila je souhaite faire un programme en C qui me permette de retrouver une information de type Char rentrée manuellement. Je souhaite aller lire ds un ouverture d'un fichier txt sur visualC++ [ par drcmomo ] Bonjour s'il vous plait aidez moi je dois ouvrir un fichier txt sur visual mon programme n'arrive pas a ouvrir le fichier. <SPAN style="F ouverture d'un gros fichier txt ( taille > 3Mo) [ par malouve ] Bonjour, J'ai a traité des fichiers txt de valeurs dont je ne connais pas le nombre d'elements mais qui font plus de 3Mo. J'ai essayé la fonction fre traitement simultannée sur des fichiers [ par boualiasma ] Bonjour, Je voulais faire un traitement en même temps sur un nombre de fichier.J'ai trouvé des difficultés pour résoudre ce problème. Je vous expliq pb de chargement d'un fichier txt dans un tableau [ par malouve ] Bonjour, j'ai un problème bloquant dans mon projet et j'ai désespérement besoin d'un coup de main [^^sad2] j'ai fait un traitement sur un fichier de b Incrementer le nom du fichier d'entrée [ par souffrance ] Salut ! J'essaie de trouver comment incrémenter le nom du fichier texte d'entrée. En faite, je voudrais que dès que le traitement du premier fichier Cherche un tuto ! [ par jekburn ] Hello, Si quelqu'un pouvait me dire ou trouver un tuto sur ces commandes. system("sort fichier.txt >> fichier1.txt"); Cette commande range par ordr a fonction seekg [ par infodaoudi ] Bonjour, je'aimerai bien savoir s'il ya un equivalement de la fonction seekg pour un fichier txt. Je m'explique j'ai un fichier txt composé des donnée


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,250 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales