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 :

Sauvegarde et lecture de fichiers


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Mai 2008
    Messages
    112
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 112
    Par défaut Sauvegarde et lecture de fichiers
    Salut, Chers developpeurs!
    J'ai deux questions, celle de sauvegarder les valeurs d'un programme et celle de la lecture de ce fichier. En fait, j'ai un programme qui me genère les valeurs d'un arrays. Le nombre d'elements des arrays varie de 7 à 300000.

    J'ai besoin de savegarder les elements de ces arrays ( avec, si possible, aussi les noms des arrays) en lignes et en colonnes. Quel code je peux utiliser?

    L'autre question est comment lire ces fichiers ( lignes et colonnes). Quelqu'un peut-il me faire un code qui me resolve celà.

    Merci d'avance

    Merlinerick

  2. #2
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Par défaut
    Salut,


    Faire le code à ta place non surement pas, ce ne serait pas te rendre service mais te montrer la voie, sans problème


    Commençons... Tu peux enregistrer les valeurs comme une représentation de matrice avec comme séparateur un espace entre chaque chiffre, par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    12 53 92 150 258
    548 68 14 58 369
    148 25 6 23 158
    821 16 547 15 47
    Une lecture de chaque ligne avec fgets puis convertir chaque valeur de chaque ligne avec strtol et ce serait bon (suffit de se documenter sur ces fonctions sur notre man : http://man.developpez.com/ pour savoir comment les utiliser

    Ce qui est des nom des tableaux, oui si tu le code en dur mais tu ne peux pas, par exemple prendre le nom de la variable et la mettre sous forme de chaîne, il faut que tu précise explicitement le nom à enregistrer pendant la phase d'enregistrement. Idem pour l'autre sens, tu ne peux pas prendre une chaîne pour nommer une variable pendant l'exécution du programme.

    Si c'est juste pour séparer plusieurs tableaux tu peux par exemple alors le nom entre crochet avant chaque tableau soit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    [Array_1]
    12 53 92 150 258
    548 68 14 58 369
    148 25 6 23 158
    821 16 547 15 47

    J'ai commencé par t'expliquer la lecture car c'est le code le plus long et plus complexe à écrire. Pour l'enregistrement c'est tout simple, tu écris dans le fichier le nom du tableau en question comme expliqué plus haut et à la ligne suivant tu boucles sur le tableau, ligne par ligne et pour chaque ligne, valeur par valeur, cela te fait deux boucles for imbriquées

    Une fois que tu aura écrit ton code tu pourras toujours le poster ici pour avoir des avis ou si tu as des problèmes/questions


    Bon courage
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  3. #3
    Membre confirmé
    Inscrit en
    Mai 2008
    Messages
    112
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 112
    Par défaut
    Tout d'abord, merci Franck H. pour ta prompte reaction.
    En fait je me suis fait un code de lecture de fichier qui, malheureusement, ne me resoud pas le probleme comme je l'ai decrit; il me lit certe le fichier, mais ce dernier est en colonne ( une seule colonne ).
    Voici le code en question:
    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
     
    double *seq;    // array  dans lequel je dois copier les valeurs du fichier
    FILE *fichier;
    char *ch;
    int i=0;
     
    ch = (char *) calloc(30, sizeof(char));  // alloccation de memoire
    seq = (double *) calloc(200000, sizeof(double));  // alloccation de memoire
     
    fichier = fopen("Adresse...", "rt");  // Ouverture de fichier
     
    while(!feof(fichier))
    {
        fgets(ch, 30, fichier);        // lecture du fichier
        sscanf(ch, "%lf", &seq[i]);  // copier les valeurs dans seq][]
        i++;
    }
    Dans ce cas, les elements dans le fichier sont sous cette forme
    1
    2
    3
    1
    23
    4
    1
    2
    ...
    ...
    ..

    Hors je veux pouvoir a partir du code enregistrer les valeurs sous cette forme
    1 2 3 4 ...
    5 6 7 8 ....
    .... ... ...
    .... ... . ..

    Et puis après pourvoir les lire.

    Comment je dois former mon code pour pouvoir le faire?

    Merci une fois de plus

  4. #4
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Par défaut
    Salut,


    Bon ce qu'il te faut en premier lieu, c'est une matrice, non un simple tableau d'une seule dimension, cela te permettra aussi de mieux visualiser la chose dans le code.

    Donc au lieu de :
    tu aurait plutôt :
    Ton allocation serait alors dans ce cas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    seq = malloc (NB_LIGNES * sizeof double);
     
    if (seq != NULL)
    {
       for (i = O; i < NB_LIGNES; i++)
       {
          seq[i] = malloc (NB_COLS * sizeof double);
     
          if (seq[i] == NULL)
          {
             /* Gestion eventuelle de l'erreur. */
          }
       }
    }

    Ta lecture de fichier... peux mieux faire (en prenant en compte que tu as déjà lu l'ID du tableau dans le fichier) :
    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
    18
    19
    20
    21
    22
    #define BUF 30
     
    /* ... */
     
    char * p1 = NULL;
    char * p2 = NULL;
    int i = 0;
    int j = 0;
     
    while (fgets (ch, BUF, fichier) != NULL)
    {
       p1 = ch;
       for (j = 0; j < NB_COLS; j++)
       {
          seq[i][j] = strtod (p1, &p2);
     
          if (p2 != NULL)
             p1 = p2;
       }
     
       i++;
    }

    J'avoue ne jamais avoir fait ce type de conversion à la chaîne mais ca devrait ressembler à quelque chose de ce genre, je n'ai pas testé

    J'ai mis un
    Pour te dire qu'en fait, si tu utilise plusieurs fois une même valeur codée en dur dans ton programme, il vaut mieux l'utiliser sous la forme d'une constante de ce type, cela t'évitera de changer X fois la valeur, là une seule fois dans tout ton code suffit
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

Discussions similaires

  1. [XL-2003] Lecture de fichier .msg sauvegardés sur un disque dur
    Par Schub78 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 20/01/2011, 18h15
  2. Sauvegarde et lecture d'un fichier
    Par Bernardo31 dans le forum Entrée/Sortie
    Réponses: 5
    Dernier message: 16/06/2009, 15h27
  3. [AS400][Intranet][PC] Lecture de "fichiers" AS400
    Par lando dans le forum Autres SGBD
    Réponses: 4
    Dernier message: 16/07/2003, 11h11
  4. Lecture de fichier
    Par Watcha dans le forum x86 16-bits
    Réponses: 13
    Dernier message: 04/03/2003, 20h43
  5. Lecture de fichiers ".WAV"...
    Par 0x4e84 dans le forum Langage
    Réponses: 2
    Dernier message: 03/09/2002, 09h43

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