Incrémenter un fichier en c
manos59
-
fiddy Messages postés 11069 Date d'inscription Statut Contributeur Dernière intervention -
fiddy Messages postés 11069 Date d'inscription Statut Contributeur Dernière intervention -
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.
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:
- Incrémenter un fichier en c
- Fichier bin - Guide
- Comment réduire la taille d'un fichier - Guide
- Comment ouvrir un fichier epub ? - Guide
- Fichier rar - Guide
- Fichier .dat - Guide
1 réponse
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 :
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,
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,