Tableau float stocké dans un fichier binaire

Résolu
samuraijack1412 Messages postés 26 Date d'inscription samedi 29 novembre 2008 Statut Membre Dernière intervention 13 juin 2009 - 24 avril 2009 à 11:40
samuraijack1412 Messages postés 26 Date d'inscription samedi 29 novembre 2008 Statut Membre Dernière intervention 13 juin 2009 - 24 avril 2009 à 17:46
Bonjour,

J'ai stocké un tableau float dans un fichier binaire. Comment je peux afficher ce tableau du fichier binaire? Merci :)

13 réponses

fregolo52 Messages postés 1114 Date d'inscription mercredi 15 juin 2011 Statut Membre Dernière intervention 6 mai 2021 4
24 avril 2009 à 17:36
Essaie avec  while (!feof(stream)) {

PS : je donne des directive, pas obligatoire du code propre.
3
fregolo52 Messages postés 1114 Date d'inscription mercredi 15 juin 2011 Statut Membre Dernière intervention 6 mai 2021 4
24 avril 2009 à 13:58
euh, je comprends pas.
fread ne va pas ?
peux-tu détailler ?
0
samuraijack1412 Messages postés 26 Date d'inscription samedi 29 novembre 2008 Statut Membre Dernière intervention 13 juin 2009
24 avril 2009 à 14:23
J'ai écrit une application Console Win32. Cette application retourne une tableau d'une dimension qui contient des réels. Je l'ai écrire dans un fichier binaire (.dat). Maintenant, je veux relire ce fichier et afficher sur l'écran son contenu. J'arrive à afficher le contenu d'un fichier binaire qui contient des caractères avec les fonction fgetc() ou fgets(), mais pour les valeur réelles, je sais pas comment faire.
0
fregolo52 Messages postés 1114 Date d'inscription mercredi 15 juin 2011 Statut Membre Dernière intervention 6 mai 2021 4
24 avril 2009 à 14:44
Ah ok !!
donc regarde du côté de fread.
tu lis le fichier par bloc de 'sizeof(float)'

ca donne un truc comme ca :
FILE *stream;
stream = fopen(., r+);
int i=0;
while (feof(stream)) {
 fread(&tontableau[i++], sizeof(float), 1, stream);
}
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
samuraijack1412 Messages postés 26 Date d'inscription samedi 29 novembre 2008 Statut Membre Dernière intervention 13 juin 2009
24 avril 2009 à 14:59
D'arcord, ça marche pour lecture. Mais comment tu fais pour l'affichage?
0
samuraijack1412 Messages postés 26 Date d'inscription samedi 29 novembre 2008 Statut Membre Dernière intervention 13 juin 2009
24 avril 2009 à 15:03
Pour les fichiers binaires qui contiennent des caractère, on peut fair comme ça:

FILE *fichier;
fichier=fopen("fic.dat","r");

for (i=0; i <10; i ++)

{

fseek(fichier,i,SEEK_SET);

t[i]=fgetc(fichier);

}

fclose(fichier);


system("pause");
0
fregolo52 Messages postés 1114 Date d'inscription mercredi 15 juin 2011 Statut Membre Dernière intervention 6 mai 2021 4
24 avril 2009 à 15:13
je vois pas le souci, c'est juste remplacer fgetc par fread.

tu fais quoi pour afficher ton tableau t ? (quand c'est une chaine)

Attention, avec fread, pas besoin de fseek, la lecture "avance toute seule".
0
samuraijack1412 Messages postés 26 Date d'inscription samedi 29 novembre 2008 Statut Membre Dernière intervention 13 juin 2009
24 avril 2009 à 15:21
Cette fonction ne rend que le nombre
d'éléments lus mais ne pas afficher le contenu sur l'écran.J'attends une méthode utilisant fprintf() ou quelque chose comme ça.
0
fregolo52 Messages postés 1114 Date d'inscription mercredi 15 juin 2011 Statut Membre Dernière intervention 6 mai 2021 4
24 avril 2009 à 15:27
si tu affiches en meme que la lecture, ca devient :
while (feof(stream)) {
 fread(&tontableau[i], sizeof(float), 1, stream);
 fprintf(stdout,"%f", tontableau[i]);
 i++;
}
0
samuraijack1412 Messages postés 26 Date d'inscription samedi 29 novembre 2008 Statut Membre Dernière intervention 13 juin 2009
24 avril 2009 à 15:42
Il n'affiche toujours pas. Voilà mon programme:

printf("Result: \n");
for(int sample=0;sample<10;sample++){
     printf("Val channel 0 index %d = %f\n",sample,val[sample]);
      } 
         
Acquis = fopen("data.dat","wb");
 printf("Saving...\n");
fwrite(val,sizeof(float),10,Acquis);
fclose(Acquis)

printf("Content saved: \n");   
Acquis = fopen("data.dat","rb");
int i=0;
while (feof(Acquis)) {
         fread(&val[i], sizeof(float), 1, Acquis);
         fprintf(stdout,"%f", val[i]);
         i++;
         }
fclose(Acquis);
0
fregolo52 Messages postés 1114 Date d'inscription mercredi 15 juin 2011 Statut Membre Dernière intervention 6 mai 2021 4
24 avril 2009 à 16:56
c'est louche !!!!
ton fichier fait bien 40 octets ?
Là, je vois pas, faut tracer avant pendant et pares le while pour connaitre le pb.
0
samuraijack1412 Messages postés 26 Date d'inscription samedi 29 novembre 2008 Statut Membre Dernière intervention 13 juin 2009
24 avril 2009 à 17:12
Ouais. Mais est-ce que tu as essayé le fonctionnement. Lance le programme ci-dessous et tu verras. Il n'affiche rien.

#include <stdlib.h>

int main()
{
    float val[20];
    for(int i=0;i<20;i++)
        val[i]=rand();

    FILE *stream;

    stream = fopen("data.dat","wb+");
    fwrite(val,sizeof(float),20,stream);
    fclose(stream);

    stream = fopen("data.dat","rb");
    int i=0;
    while (feof(stream)) {
    fread(&val[i], sizeof(float), 1, stream);
    fprintf(stdout,"%f", val[i]);
    i++;
    }
    fclose(stream);

    system("PAUSE");
    return 0;
}
0
samuraijack1412 Messages postés 26 Date d'inscription samedi 29 novembre 2008 Statut Membre Dernière intervention 13 juin 2009
24 avril 2009 à 17:46
Nikel, ça marche. Merci bien!
0
Rejoignez-nous