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 :

Stockage des données d'un fichier


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2014
    Messages
    375
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

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

    Informations forums :
    Inscription : Novembre 2014
    Messages : 375
    Par défaut Stockage des données d'un fichier
    Bonjour à tous,

    Actuellement je cherche à stocker chaque ligne suivant le format : 1497.000000 ; 335.677250 ; ...

    La première valeur dans un tableau 1D,
    La deuxième dans un autre tableau 1D,
    ...

    Sachant que par la suite j'aimerais afficher un spectre en nanomètre. Peut être il y a t-il un format moins contraignant? comme 1497.82,335.67.



    J'essaie de modifier ce code afin de réaliser ce que je veux mais ce n'est pas si simple de stocker le premier chiffre... dans un tableau :


    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
            //Utilisation de fgetc
            //fgetc example: money counter
     
              FILE * pFile;
              int c;
              int n = 0;
              int n2 = 0;
              pFile=fopen ("test.txt","r");
              if (pFile==NULL) perror ("Error opening file");
              else
              {
                do {
                  c = fgetc (pFile);
                  if (c == '$') n++;
                  if (c == '\n') n2++;
                } while (c != EOF);
                fclose (pFile);
                printf ("The file contains %d dollar sign characters ($).\n",n);
                printf ("The file contains %d retour chariot .\n",n2);
              }

  2. #2
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2014
    Messages
    375
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

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

    Informations forums :
    Inscription : Novembre 2014
    Messages : 375
    Par défaut
    J'ai peut être trouvé une solution.
    Je découpe en sous-chaîne avec la fonction strstr pour récupérer différentes sous-chaînes afin de les soustraire avec la chaîne totale de caractère.

    Voici un exemple qui me retourne Segmentation fault !!! Pourquoi?

    Je souhaite traiter ce format : 1498.000000,335.677250

    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
     
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
     
    #include </home/jo-pc/OmniDriverSPAM/include/Wrapper.h>
    #include </home/jo-pc/OmniDriverSPAM/include/ArrayTypes.h>
     
    #define TAILLE_LIGNE_MAX 50
     
    int main()
    {
              char *ligne = "Bonjour";
              char *sous_chaine_1;
              char *sous_chaine_2;
              char *sous_chaine_3;
              char *sous_chaine_4;
     
     
              FILE * pFile;
     
              pFile=fopen ("test.txt","r");
     
              while (fgets(ligne , TAILLE_LIGNE_MAX , pFile) != NULL)
              {
                    sous_chaine_1 = strstr(ligne,",");
              }
     
              fclose (pFile);
     
              printf("%s",sous_chaine_1);
     
     
        return 0;
    }
    Je suppose que c'est parce que je stock toutes les lignes les une à la suite des autres dans sous_chaine_1 que j'ai l'erreur de segmentation.

    J'aimerais stocker les différentes valeurs dans un tableau 1D.

    Merci d'avance

  3. #3
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par défaut
    Parce que tu n'as pas un tableau pour ligne, mais un pointeur.
    Du coup, il peut arriver que la sous chaine cherchée soit dans un bloc mémoire que tu ne possèdes plus.

  4. #4
    Membre très actif
    Avatar de sambia39
    Homme Profil pro
    No Comment
    Inscrit en
    Mai 2010
    Messages
    551
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : No Comment
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Mai 2010
    Messages : 551
    Par défaut
    Bonjour
    Quel est l'intérêt de mettre les données séparément dans des tableaux bien distincts ? c'est un peu exagérer et inadapté. Il est préférable d'utiliser un tableau à deux dimensions adaptées pour ce genre de données
    à bientôt

  5. #5
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2014
    Messages
    375
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

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

    Informations forums :
    Inscription : Novembre 2014
    Messages : 375
    Par défaut
    Ce code recopie pour chaque ligne de test1.txt la chaîne entière de caractère. J'aimerais copier stocker pour chaque ligne la valeur présente dans le tableau de caractère donnee dans un tableau 2D.

    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
    23
    24
    25
    26
    27
    28
    29
     
    int main()
    {
        char nomfich[21];
        char donnee[100];
        int n=0;
        FILE * entree;
     
        printf("nom du fichier à lister : ");
        scanf("%20s",nomfich);
        entree = fopen (nomfich,"r");
     
        do
        {fread (donnee,23,1,entree);
            printf ("\n%s\n",donnee);
     
            printf ("%d",n);
            n++;
        }
        while( !feof(entree));
     
        //while ( fread(&n, sizeof(int), 1, entree) != feof(entree) )
        //    printf("\n%d",n);
     
        fclose(entree);
     
        return 0;
     
    }

  6. #6
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2014
    Messages
    375
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

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

    Informations forums :
    Inscription : Novembre 2014
    Messages : 375
    Par défaut
    Voici un code qui regroupe les données du fichier test.txt par ligne dans un tableau 2D.

    Maintenant j'aimerais savoir si c'est possible de convertir les caractères en double? En fait les valeurs que je récupère sont normalement des doubles.

    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
     
    int main()
    {
     
        char nomfich[21];
        char donnee[100];
        char donnee_stock[100][100];
        int n=0;
        FILE * entree;
     
        printf("nom du fichier à lister : ");
        scanf("%20s",nomfich);
        entree = fopen (nomfich,"r");
     
        do
        {fread (donnee,23,1,entree);
            printf ("\n%s\n",donnee);
            strcpy(donnee_stock[n],donnee);
            printf ("%d données copiées\n",n);
            printf ("\n%s\n",donnee_stock[n]);
            n++;
        }
        while( !feof(entree));
     
        //while ( fread(&n, sizeof(int), 1, entree) != feof(entree) )
        //    printf("\n%d",n);
     
        fclose(entree);
     
        printf ("\n\n\n\n%c\n",donnee_stock[3][0]);
     
        return 0;
     
    }

  7. #7
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2014
    Messages
    375
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

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

    Informations forums :
    Inscription : Novembre 2014
    Messages : 375
    Par défaut
    Il y a quelques printf en trop mais ce code réalise les fonctions suviantes :
    -acquisition ligne par ligne de X caractères à partir de la position du pointeur de fichier Y
    -stock dans un tableau 2D les caractères ligne par ligne
    -réalise la conversion d'une chaîne de caractère en double

    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
     
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
     
    int main()
    {
        char nomfich[21];
        char donnee[100];
        char donnee_stock[100][100];
        double don;
        int n=0;
        FILE * entree;
     
        printf("nom du fichier à lister : ");
        scanf("%20s",nomfich);
        entree = fopen (nomfich,"r");
     
        do
        {   fseek (entree,12,SEEK_CUR);
            fread (donnee,11,1,entree); //normalement position max 23
            printf ("\n%s\n",donnee);
            strcpy(donnee_stock[n],donnee); //copie d'une chaine de caractère dans un tableau 2D
            printf ("%d données copiées\n",n);
            printf ("\n%s\n",donnee_stock[n]);
            n++;
        }
        while( !feof(entree));
     
        fclose(entree);
     
        printf ("\n\n\n\n%c\n",donnee_stock[3][0]);
     
        don = atof(donnee_stock[1]); //conversion chaine de caractère en double
        printf("%lf",don);
        return 0;
    }
    Bonne soirée à tous

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Débutant] stockage des données d"un fichier dans une matrice
    Par amateur87 dans le forum MATLAB
    Réponses: 1
    Dernier message: 14/05/2013, 18h22
  2. [XML] stocker des données dans un fichier XML
    Par R3iTt0R dans le forum XML/XSL et SOAP
    Réponses: 5
    Dernier message: 27/05/2005, 16h51
  3. Réponses: 3
    Dernier message: 13/12/2004, 13h54
  4. Réponses: 3
    Dernier message: 22/02/2004, 20h09
  5. Temps d'accès à des données dans un fichier
    Par TONIAPEL dans le forum Assembleur
    Réponses: 5
    Dernier message: 28/09/2003, 15h21

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