[C] copier un fichier de données formatées via une fonction externe...

copier un fichier de données formatées via une fonction externe... [C] - C++ - Programmation

Marsh Posté le 27-04-2003 à 18:41:22    

Bonjour !
 
Alors voilà, le but est simple : copier un fichier texte (et remplacer les virgules qu'il contient par des points).
A priori c'est très simple, j'arrive à le faire quand tout est dans le même fichier mais j'ai voulu séparer les étapes et donc j'ai créé plusieurs fichiers.
 
J'ai donc mon fichier main.c qui contient (entre autres) :

Code :
  1. /* main.c */
  2. #include "main.h"
  3. int main(void)
  4. {
  5. FILE *file_excel;
  6. FILE *file_temp;
  7. printf("COPIE :\n" );
  8. /* ouverture des fichiers pour la copie avec transformation des virgules en points */
  9. if( ( ( file_excel = fopen("c:\\morphing.txt", "r" ) ) != NULL ) && ( ( file_temp = fopen("c:\\morphing_temp.txt", "w" ) ) != NULL ) )
  10. {
  11.  printf("-> L'ouverture des fichiers s'est realisee correctement.\n" );
  12.  if( transformation(file_excel,file_temp) == -1 )
  13.  {
  14.   printf(" !! Erreur dans les pointeurs de fichiers !!\n" );
  15.  }
  16.  else
  17.  {
  18.   printf("-> Copie du fichier reussie.\n" );
  19.  }
  20. }
  21. else
  22. {
  23.  printf(" !! Erreur lors d'une ouverture de fichier !!\n" );
  24. }
  25. /* fermeture des fichiers */
  26. if( ( fclose(file_excel) != EOF ) && ( fclose(file_temp) != EOF ) )
  27. {
  28.  printf("-> La fermeture des fichiers s'est realisee correctement\n" );
  29. }
  30. else
  31. {
  32.  printf(" !! Erreur lors d'une fermeture de fichier !!\n" );
  33. }


 
Et puis j'ai mon fichier lecture.c qui contient cette fonction transformation() :

Code :
  1. /* lecture.c */
  2. #include "lecture.h"
  3. int transformation(FILE *fpIn, FILE *fpOut)
  4. {
  5. int c;
  6. int ret = 0;
  7. if( ( fpIn != 0 ) && ( fpOut != 0 ) )
  8. {
  9.  while ( (c = getc(fpIn)) != EOF)//copie du fichier vers un fichier temporaire
  10.  {
  11.   if( c == ',' ) //remplacement des virgules en points
  12.   {
  13.    c = '.';
  14.   }
  15.   putc(c, fpOut);
  16.  }//fin de copie du fichier
  17. }
  18. else
  19. {
  20.  ret = -1;
  21. }
  22. return ret;
  23. }


 
Le problème c'est que là mon fichier destination (morphing_temp.txt) est vide après l'exécution du programme !
 
Apparemment ça vient du fopen puisque quand je fais l'ouverture des fichiers au sein de la fonction transformation(), tout marche bien.
 
Alors est-ce qu'il y aurait moyen d'adapter pour que ce que j'ai copiécollé fonctionne ? ou alors suis-je obligé de faire les ouvertures et fermetures de fichiers dans la fonction qui traite le fichier ? (dans ce cas il n'y a pas d'argument et ell n'est donc ps utilisable, ce que je voudrais éviter si possible).
 
 
Merci d'avance !!

Reply

Marsh Posté le 27-04-2003 à 18:41:22   

Reply

Marsh Posté le 28-04-2003 à 09:14:46    

En regardant le code vite fait, je vois pas pourquoi ca ne fonctionne pas. En tous cas, le fait que tu fasses tes fopen() en dehors de la fonction ne devrait pas changer quoique ce soit.  
 
Bon, je sais ca t'aide pas trop...à part de faire un up.
 

Reply

Marsh Posté le 28-04-2003 à 09:49:25    

freeman_78 a écrit :

Bonjour !
 
Alors voilà, le but est simple : copier un fichier texte (et remplacer les virgules qu'il contient par des points).
A priori c'est très simple, j'arrive à le faire quand tout est dans le même fichier mais j'ai voulu séparer les étapes et donc j'ai créé plusieurs fichiers.
 
J'ai donc mon fichier main.c qui contient (entre autres) :

Code :
  1. plein de trucs


 
Le problème c'est que là mon fichier destination (morphing_temp.txt) est vide après l'exécution du programme !
 
Apparemment ça vient du fopen puisque quand je fais l'ouverture des fichiers au sein de la fonction transformation(), tout marche bien.


Ca serait étonnant que ca vienne du fopen, tes messages d'erreur te préviendraient...
 

Citation :


Alors est-ce qu'il y aurait moyen d'adapter pour que ce que j'ai copiécollé fonctionne ? ou alors suis-je obligé de faire les ouvertures et fermetures de fichiers dans la fonction qui traite le fichier ? (dans ce cas il n'y a pas d'argument et ell n'est donc ps utilisable, ce que je voudrais éviter si possible).


 
Si tu veux absolument des paramètres, il suffit passer les noms des fichiers à ouvrir...c'est tout à fait utilisable, et d'ailleurs je trouve plus lisible de faire les ouvertures et fermetures de fichiers dans la fonction ou je lis/écris ces fichiers.
 
Je ne connais pas le retour de getc(), mais vérifie que ta technique de détection de fin de fichier est valable, tu ne rentres p-e jamais dans ton while ( (c = getc(fpIn)) != EOF).


Message édité par skeye le 28-04-2003 à 09:50:05
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed