alut
le prof nous demande d'écrire un programme qui stocke les données d'un fichier dans un tableau de structures (chaque ligne correspond à une structure) puis les écris dans un autre fichier grâce à fwrite. C là que mon programme bug!
voici un exemple de fichier dont on doit réécrire en flux binaire :
nom_molecule_geo.txt dit :
H -0.919324 0.710534
O 0.000000 0.950000
H 0.000000 1.900000
O -0.000004 3.600000
H 0.822702 4.075001
H 0.570413 4.990889
voici mon programme :
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct GEO
{
char atome;
double x;
double y;
}GEO;
long calcul_ligne (char fichier[15])
{
FILE* donnees = NULL;
char chaine[200];
long nombre_ligne=0;
donnees=fopen(fichier, "r");
if (donnees !=NULL)
{
while (fgets(chaine, 200, donnees) !=NULL)
{
nombre_ligne++;
}
fclose(donnees);
}
else
{
printf("%s ne peut s'ouvrir\n", fichier);
}
return nombre_ligne;
}
int main()
{
long k=0;
long longueur_nom=0, nombre_ligne_geo=0;
GEO *coordonnees=NULL;
char nom[40]={0};
FILE* fichier_geo=NULL;
printf("Quelle est le nom de la molecule?\n");
scanf("%s", &nom);
longueur_nom= strlen(nom);
// recupere donnees de geo.txt
strcat(nom, "_geo.txt");
fichier_geo=fopen(nom, "r");
nombre_ligne_geo= calcul_ligne(nom);
coordonnees = malloc(nombre_ligne_geo * sizeof(GEO));
printf("\ndonnees extraites pour geo.txt\n");
for (k=0;k<nombre_ligne_geo;k++)
{
fscanf(fichier_geo, "%c%lf%lf", &coordonnees[k].atome, &coordonnees[k].x, &coordonnees[k].y);
//verification des donnees extraites
printf("ligne %ld : %c %lf %lf\n", k+1, coordonnees[k].atome, coordonnees[k].x, coordonnees[k].y);
}
fclose(fichier_geo);
//incorporation des donnees dans xxx_geo_bin.txt
nom[longueur_nom] = '\0'; //reinitialisation nom
strcat(nom, "_geo_bin.txt");
fichier_geo=fopen(nom, "wb");
if (fichier_geo == NULL)
{
printf("\nimpossible de creer le fichier\n");
}
else
{
for (k=0;k<nombre_ligne_geo;k++)
{
fwrite(&coordonnees[k], sizeof(GEO), 1, fichier_geo);
}
}
fclose(fichier_geo);
free(coordonnees);
//verif par fread de xxx_geo_bin.txt
fichier_geo=fopen(nom, "r");
printf("\nverif par fread pour xxx_geo_bin.txt :\n");
GEO *coordonnees2=NULL;
coordonnees2 = malloc(nombre_ligne_geo * sizeof(GEO));
for (k=0;k<nombre_ligne_geo;k++)
{
fread(&coordonnees2[k], sizeof(GEO), 1, fichier_geo);
printf("ligne %ld : %c %lf %lf\n", k+1, coordonnees2[k].atome, coordonnees2[k].x, coordonnees2[k].y);
}
fclose(fichier_geo);
free(coordonnees2);
system("PAUSE");
}
apparement tu lis bien un fichier texte, et en enregistre un en binaire
je dirais qu'à la fin de ton programme tu as ajouté des lignes pour vérifier ce qui a été enregistré dans le fichier ?
ton fichier est à ce moment enregistré en binaire (wb), il faut l'ouvrir en binaire pour le lire correctement (rb)
__________________________
Spirit - modérateur casu ^-^'
salut
j'ai essayé avec une lecture en binaire (rb) mais j'obtiens la meme chose. voila ce que le programme m'écrit :
donnees extraites pour geo.txt
ligne 1 : H -0.919324 0.710534
ligne 2 : O 0.000000 0.950000
ligne 3 : H 0.000000 1.900000
ligne 4 : O -0.000004 3.600000
ligne 5 : H 0.822702 4.075001
ligne 6 : H 0.570413 4.990889
verif par fread pour xxx_geo_bin.txt :
ligne 1 : H 0.000000 0.000000
ligne 2 : 0.000000 0.000000
ligne 3 : 0.000000 0.000000
ligne 4 : 0.000000 0.000000
ligne 5 : 0.000000 0.000000
ligne 6 : 0.000000 0.000000
j'ai donc soit un pb lors de l'ecriture (fwrite) soit lors de la lecture (fread) mais je n'arrive pas a savoir où
J'ai compiler ton programme mais je n'ai pas les fichiers a ouvrir... Si j'ai bien compris, ton programme doit lire "H -0.919324" puis l'enregisrer en binaire dans un autre fichier(sans le 'H'), c'est bien ca?
j'ai mis le contenu du fichier à ouvrir dans mon 1er post (nom_molecule_geo.txt)
je dois lire les données de ce fichier et toutes les réécrire dans un autre fichier avec un flux binaire. Je verifie apres si ça fonctionne en lisant le nouveau fichier avec fread mais ça plante