IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Enregistrement, ouverture d'un fichier contenant une structure


Sujet :

C

  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mai 2011
    Messages : 13
    Par défaut Enregistrement, ouverture d'un fichier contenant une structure
    Bonjour à vous.

    J'ai suivi divers tuto sur le net pour essayer d'enregistrer et charger un tableau consititué d'une telle structure dans un fichier mais je n'y arrive pas.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    typedef struct cellule{
            char index[10];
            char formule[100];
            float val;
    }tcell;
    le tout est présent dans un tableau de type t[i][j].

    Je ne vois pas comment m'y prendre... Travailler avec plusieurs fichiers ne faciliterait-il pas la tâche?

    N'auriez vous pas des pistes à me conseiller?

    merci

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Août 2006
    Messages
    1 104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 104
    Par défaut
    Ta structure contient deux tableaux à 1 dimension. Si tes données doivent se trouver dans un tableau à 2 dimensions, effectivement, ça va poser un problème.

    En fait, je ne comprends pas vraiment ta question. Pourquoi ne pas créer un tableau à deux dimensions ?

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mai 2011
    Messages : 13
    Par défaut
    Il s'agit d'un programme de mini tableur.

    (J'ai une autre structure avec l'utilisation d'une liste chainée pour créer l'index, mais celle-ci sera recrée au moment du chargement, car la taille du tableau est fixe....Ca pourrait être vu comme inutile mais j'ai d'autres contraintes.... En tout cas ça ne sert à rien d'en reparler ici...)

    En quelque sorte j'ai un tableau de la sturcture notée plus haut à deux dimensions....

    Je voudrais savoir comment enregistrer son contenu dans un fichier puis l'exploiter (pour faire une sauvegarde-chargement de données sur lesquelles on a travaillé...).

    Donc il me faudrait pour chaque case de ce tableau, enregistrer index, formule et val.
    Et dans un second temps pouvoir tout réimporter dans un tableau vierge.


    Désolé si je m'exprime mal....

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 60
    Par défaut
    Bonjour,

    une manière simple de résoudre ton problème, serait de gérer ton fichier de sauvegarde comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    X  // nombre de ligne du tableau à sauver
    Y // nombre de colonnes
    /* t[0][0] */
    0 1 2 3 4 5 6 7 8 9  // le tableau index
    0 1 2 3 4 /* ... */ 98 99  // le tableau formule
    3.14  // val
     
    /* idem pour t[0][1], etc...*/
    Pour sauvegarder ce fichier, regarde du côté de la fonction fprintf(), pour la lecture, utilise fscanf().
    Le X, et le Y que tu liras dans le fichier, te permettra d'allouer suffisamment de mémoire pour ton tableau.

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 60
    Par défaut
    Bien sûr, sans les commentaires !!
    Il est aussi possible de le gérer directement en binaire, mais c'est plus compliqué pour les floats...

  6. #6
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 81
    Par défaut
    Citation Envoyé par DeathMixer Voir le message
    Il est aussi possible de le gérer directement en binaire, mais c'est plus compliqué pour les floats...
    C'est pas plus simple au contraire ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fwrite(&my_float, sizeof (float), 1, my_file);

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 60
    Par défaut
    Au temps pour moi !!
    Je n'avais plus pensé aux fonctions fwrite()/fread() !!

  8. #8
    Membre Expert
    Profil pro
    Inscrit en
    Août 2006
    Messages
    1 104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 104
    Par défaut
    C'est pas plus simple au contraire ?
    C'est surtout pas portable.

  9. #9
    Inactif  
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    123
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 123
    Par défaut pour la lecture
    Bonsoir,
    de conseil en conseil, je vais bien finir par me faire un nom dans ce site, n'est-ce pas ?
    Il faut anticiper sur la lecture pour savoir comment faire l'écriture.
    • Les éléments sont des chaînes de caractères. Les relire, c'est avec un while(c) addchar(s,c);
    • Le float est généralement codé sur 8 octets => utiliser fscanf pour lire le float
    • le tableau, il suffit de faire 2 boucles imbriquées pour lire et écrire.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    En lecture ou écriture
    for(i=0; i < L; i++) {
      for(j=0; j < N; j++) {
        write-read(t[i][j]);
      }
    }
     
    write()
       write(index);
       write(formule);
       fprintf(file, "%f", float);
     
    read()
       while(c) addstr(index,c)
       while(c) addstr(formule,c)
       fscanf(file, "%f", &float);
    + gestion des strings (augmenter l'allocation mémoire)

  10. #10
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 615
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 615
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par olivieram Voir le message
    Bonsoir,
    de conseil en conseil, je vais bien finir par me faire un nom dans ce site, n'est-ce pas ?
    sans doute, mais pas forcément dans le bon sens

    encore une fois, ce n'est pas portable.. TOUTE écriture binaire n'est pas portable..

    Pas d'une arrchitecture à 'lautre ou d'un OS à l'autre..

    On a déjà répondu de nombreuses fois (une simple recherche ici donne je crois quelque chose en page 2)


    Maintenant ce que tu indiques est une écriture en ASCII, qui n'est pas ce qui est demandé..

    On peut écrire une structure en binaire de manière portable et la récupérer, mais pour cela il faut la faire élément par élément, et utiliser les fonctions hton.. et ntoh..

Discussions similaires

  1. Structure d'un fichier contenant une image
    Par alexmam15 dans le forum Qt
    Réponses: 1
    Dernier message: 14/01/2011, 06h21
  2. Upload et enregistrement du nom du fichier dans une bdd
    Par johan_barbier dans le forum XMLRAD
    Réponses: 8
    Dernier message: 26/09/2005, 12h02
  3. Réponses: 9
    Dernier message: 22/09/2005, 11h52
  4. [systeme]Ouverture aut. de fichiers d'une certaine extension
    Par AnKhCHFR dans le forum API standards et tierces
    Réponses: 2
    Dernier message: 23/08/2005, 17h06
  5. Trouver un fichier contenant une chaine ?
    Par narmataru dans le forum Linux
    Réponses: 2
    Dernier message: 29/04/2004, 10h49

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo