RECHERCHER :
COMMUNAUTE MP
Identifiez vous ...
Devenir Membre
J'ai oublié mon MDP
DOMAINE MP
Bavardages
Langages Généraux
Langages Web
Langages DotNet
Autres langages
Dev. Jeux Video
Sécurité
Sys. Exploitation
Graphismes
Logiciels
Réseaux
Bases de données
Méthodologies
Emplois High-tech
Aide juridique
Articles juridiques
FORUM
Index des forums
Ajouter un sujet
Rechercher sujet
Contact Responsable
Devenir modérateur
CHAT MP IRC
Votre pseudo ...
Serv: irc.irc-land.org
Chan: #MoteurProg
PARTICIPER
Plus de 3500 emplois.
Rechercher un job
Déposez votre CV
Emplois High-tech

Visiteur MP

 pb flux binaire (fread/fwrite)

Forum : C
Sous Catégorie : Aucune
Type du sujet : Sujet Normale
FAQ : FAQ C

SUIVI DES SUJETS PAR MAIL

SUIVI PAR MAIL INACTIF

RESOLUTION DU SUJET SUJET NON RESOLU
BLOQUAGE DU SUJET SUJET ACTIF
APPARTENANCE A LA FAQ N'APPARTIENT PAS A LA FAQ


PAGE : [1]

POSTER UN NOUVEAU SUJET REPONDRE A CE SUJET

FORUM C

PREMIERE PAGE

PAGE PRECEDENTE

Page précedente

Page suivante

PAGE SUIVANTE

DERNIERE PAGE
landraille
Nouveau membre
Inscrit : 24/02/2008
Messages : 14
Message
#150929
Posté le 20/03/08 à 20:13
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"); }


merci bcp

HAUT DE PAGE

PROFIL MEMBRE LUI ECRIRE 

Publicité
Inscrit : X
Messages : X
Message
#Aucun

HAUT DE PAGE

  

Spirit
Superviseur :
- C & C++
Modérateur :
- PHP
- Javascript
- MySQL
Avatar de Spirit
Inscrit : 07/04/2004
Messages : 1946
Message
#150954
Posté le 21/03/08 à 12:59
qu'est-ce qui ne marche pas ?

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 ^-^'

HAUT DE PAGE

PROFIL MEMBRE LUI ECRIRE 

landraille
Nouveau membre
Inscrit : 24/02/2008
Messages : 14
Message
#150955
Posté le 21/03/08 à 13:40
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ù

HAUT DE PAGE

PROFIL MEMBRE LUI ECRIRE 

vortex666
Modérateur :
- C & C++
- OpenGL
- Delphi
Chef de projet(s) :
- Vortez3DEngine

Avatar de vortex666
Inscrit : 20/09/2004
Messages : 482
Message
#150969
Posté le 21/03/08 à 18:52
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?

HAUT DE PAGE

PROFIL MEMBRE LUI ECRIRE 

landraille
Nouveau membre
Inscrit : 24/02/2008
Messages : 14
Message
#151050
Posté le 24/03/08 à 16:18
salut

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

HAUT DE PAGE

PROFIL MEMBRE LUI ECRIRE 

Spirit
Superviseur :
- C & C++
Modérateur :
- PHP
- Javascript
- MySQL
Avatar de Spirit
Inscrit : 07/04/2004
Messages : 1946
Message
#151061
Posté le 24/03/08 à 17:34
ça plante à quel niveau ?

sinon, pourquoi ne pas lire le fichier d'un coup ?

fread(coordonnees2, sizeof(GEO), nombre_ligne_geo, fichier_geo);

sans oublier d'ouvrir en "rb" et pas en "r"
__________________________
Spirit - modérateur casu ^-^'

HAUT DE PAGE

PROFIL MEMBRE LUI ECRIRE 
POSTER UN NOUVEAU SUJET REPONDRE A CE SUJET

PREMIERE PAGE

PAGE PRECEDENTE Page précédente

Page suivante

PAGE SUIVANTE DERNIERE PAGE

FORUM C



    PAGE : [1]



.: Site Web développé par Julien Pichot et l'équipe MPWG avec www.evolvia-web.com :.