Incrémenter un fichier en c

Fermé
manos59 - 6 mars 2010 à 12:08
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 6 mars 2010 à 12:30
Bonjour,


J'aimerai incrémenter le nom d'un fichier mais ça parait compliqué en langage C.

J'ai écris ce bout de code pour illustrer mes propos :


#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include <string.h>
#define size 200
//#define ncorps 10


main ()
{
int k; // indice du corps solide
int ncorps; // nombre de corps solides dans mon systeme
int compteur; // le compteur
int maxcompteur; // nombre max d'itérations
int sauv; // fréquence de sauvegarde
double dt,temps;
double x[size]={0}; // la valeur à calculer et à sauvegarder
// pour chaque corps
// supposons ici qu'elle est connue
FILE*fichier;


dt=0.000001;
temps=0;
ncorps=5;
sauv=2;
maxcompteur=10;
compteur=1;

fichier=fopen("resu.dat","w");



do{

if(compteur%sauv==0){
fprintf(fichier,"# iteration n°%d \n",compteur);
for(k=1;k<ncorps+1;k++){
x[k]=2.5*k*temps;
fprintf(fichier,"%d %lf %lf\n",k,temps,x[k]);

}
fprintf(fichier,"\n");
}
temps+=dt;
compteur+=1;


}while(compteur<=maxcompteur);
fclose(fichier);
}



et voici le résultat que j'obtiens :

# iteration n°2
1 0.000001 0.000002
2 0.000001 0.000005
3 0.000001 0.000007
4 0.000001 0.000010
5 0.000001 0.000012

# iteration n°4
1 0.000003 0.000008
2 0.000003 0.000015
3 0.000003 0.000023
4 0.000003 0.000030
5 0.000003 0.000038

# iteration n°6
1 0.000005 0.000012
2 0.000005 0.000025
3 0.000005 0.000037
4 0.000005 0.000050
5 0.000005 0.000063

# iteration n°8
1 0.000007 0.000017
2 0.000007 0.000035
3 0.000007 0.000052
4 0.000007 0.000070
5 0.000007 0.000087

# iteration n°10
1 0.000009 0.000023
2 0.000009 0.000045
3 0.000009 0.000068
4 0.000009 0.000090
5 0.000009 0.000113


Au lieu d'avoir tout les résultats dans le même fichier tel que montré ci-dessus, j'aimerai écrire dans des fichiers séparés car ( nombre de corps très important). Il faut que j'incrémente le nom de mon fichier comme ceci :

fichier2.dat
fichier4.dat
fichier6.dat
.
.
.
fichierN.dat

N: numéro de l'itération


J'ai déjà écris ce genre de code mais en langage FORTRAN et en langage C je galère à le faire...

Voilà si vous avez une idée, merci à vous et bon week-end.
A voir également:

1 réponse

fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 836
6 mars 2010 à 12:30
Salut,

Pour créer un fichier, il suffit de mettre : fopen(chemin,"w") et on le ferme avec la fonction fclose().
Donc à la place de : fprintf(fichier,"# iteration n°%d \n",compteur); tu vas plutôt ouvrir ton fichier avec fopen en mode écriture.
Ensuite, ce qui peut poser problème c'est de trouver comment incrémenter le chemin. Eh bien, tu peux utiliser la fonction sprintf (ou mieux snprintf en C99). Par exemple :
/*en début de code*/
char chemin[30]; 
FILE *fp=NULL;

/*dans ta boucle*/
if(fp) fclose(fp); /*ne pas oublier de fermer le fichier en cours*/
sprintf(chemin,"fichier%d.dat",compteur); /*on change le nom du chemin pour le futur fichier*/
fp=fopen(chemin,"w"); /*on créé le nouveau fichier*/

/*après la boucle*/
fclose(fp); /*on ferme le dernier fichier*/

De plus, n'oublie pas de vérifier la bonne ouverture du fichier avec fopen en testant la valeur de retour.
N'oublie pas que le prototype de main() sans argument est : int main(void) et que la fonction renvoie 0 quand tout a bien fonctionné (return 0; en fin de main()).
Et pour finir, pour afficher un double, ce n'est pas %lf mais %f qu'il faut mettre :
double temps;
printf("%f",temps);

Cdlt,
0