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 :

Sélection des données dans un fichier txt pour remplir une structure


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juillet 2015
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Service public

    Informations forums :
    Inscription : Juillet 2015
    Messages : 105
    Par défaut Sélection des données dans un fichier txt pour remplir une structure
    Bonjour a tous.

    J'ai ce programme :

    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
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
     
     
    struct application
    {
        char id[100];
        char descr [100];
        char owner [100];
    };
     
    int main()
     
    {
    int i=0;
    struct application tab[1];
    FILE*batch;
    batch=fopen("C:\\Documents and Settings\\xxx\\Bureau\\recup_simple.txt","r");
        //for(i=0;i<3;i++)
    //{
        fscanf(batch,"%s %s %s",&tab[i].id,&tab[i].descr,&tab[i].owner);
        printf("%s\n%s\n%s\n",tab[i].id,tab[i].descr,tab[i].owner);
    //}
    }
    me permettant de remplir ma structure avec des lignes d'un fichier txt en pièce jointe. Voici le contenu de ce fichier :
    ID(appli01) 
    DESCR('programme1')
    OWNER('tabs02')
    Mon souhait est de remplir ma structure pas avec toute la ligne mais avec les mots entre parenthèses (ou ' ' et parenthèses).Sachant que le nombre de caractères peut varié, comment sélectionner sans avoir recours aux pointeurs (si cela est possible)

    Merci
    Fichiers attachés Fichiers attachés

  2. #2
    Membre expérimenté
    Avatar de ChipsAlaMenthe
    Homme Profil pro
    Ingénieur en eau chaude et ballon rond
    Inscrit en
    Mai 2015
    Messages
    138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Ingénieur en eau chaude et ballon rond
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Mai 2015
    Messages : 138
    Par défaut
    Salut à toi! ^^

    Regarde du côté des "sscanf", "sprintf", fprintf", tu trouveras ton bonheur ^^.

  3. #3
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2009
    Messages
    4 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

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

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 493
    Billets dans le blog
    1
    Par défaut
    @ChipsAlaMenthe : as-tu lu son code ? Il utilise fscanf()...

    @nysay27 : l'idée est là, mais il faut jouer un peu plus finement avec les formateurs.

    Quelque chose comme ça pourrait faire l'affaire.
    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
    #include <stdio.h>
    #include <stdlib.h>
     
    int main()
    {
        char buffer[1000] = {0};
        const char * str = "ID(appli01)";
        sscanf(str, "%*[^(](%99[^)])", buffer);
        printf("--> %s\n", buffer);
     
        str = "DESCR('programme1')";
        sscanf(str, "%*[^(](%99[^)])", buffer);
        printf("--> %s\n", buffer);
     
        str = "OWNER('tabs02')";
        sscanf(str, "%*[^(](%99[^)])", buffer);
        printf("--> %s\n", buffer);
    }

  4. #4
    Membre confirmé
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juillet 2015
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Service public

    Informations forums :
    Inscription : Juillet 2015
    Messages : 105
    Par défaut
    Merci beaucoup pour la réponse.

    J'ai deux petites questions .Mais si c'est question sont résolues, j'aurais fait un grand pas en avant.

    Petit 1 ) Est ce que je peux meler la fonction fgets pour lire tout mon txt et sscanf qui après un test de chaine de caractère me permettrait de de remplir toute une série de structure?

    Petit 2) Je vois que la sélection est très compliquée sur un txt, si imaginons j'ai des séries de blanc sur le coté, je devrais clairement les spécifiés dans le sscanf?
    Cela est très difficile du coup pour la reproductivité du programme (si le txt est un peu décalé a l'enregistrement...)?

    Merci

  5. #5
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2009
    Messages
    4 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

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

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 493
    Billets dans le blog
    1
    Par défaut
    L'idée est plutôt de faire un fscanf() sur le fichier, pour récupérer les données sans avoir besoin de les charger en RAM. J'ai utilisé sscanf() car c'est un peu plus simple pour écrire un test.

    Pour ce qui est des blancs, j'ai testé le code suivant et il les supprime bien :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        str = "  DESCR  ('programme1')";
        sscanf(str, "%*[^(](%99[^)])", buffer);
        printf("--> %s\n", buffer);
    Le formateur %*[^(] dit de jeter tous les caractères jusqu'à rencontrer une parenthèse, donc les blancs sont eux aussi jetés. Si c'était bien ça ta question...

    Remarque que tu peux aussi faire quelque chose comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        str = "DESCR('programme1')";
        sscanf(str, "DESCR(%99[^)])", buffer);
        printf("--> %s\n", buffer);

  6. #6
    Membre confirmé
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juillet 2015
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Service public

    Informations forums :
    Inscription : Juillet 2015
    Messages : 105
    Par défaut
    Mervi Btero 1000 fois. Je test tout cela demain quand j'ai environnement de développement et je te tiens au courant

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

Discussions similaires

  1. Rechercher des données dans un fichier txt
    Par joboy84 dans le forum Langage
    Réponses: 5
    Dernier message: 11/06/2008, 15h00
  2. Réponses: 6
    Dernier message: 20/01/2008, 16h32
  3. [VBS]Lire des données dans un fichier .txt
    Par kacxial dans le forum VBScript
    Réponses: 4
    Dernier message: 28/02/2007, 13h44
  4. Réponses: 1
    Dernier message: 05/09/2006, 17h56
  5. Remplacer / Supprimer des données dans un fichier txt
    Par PedroBD dans le forum Langage
    Réponses: 3
    Dernier message: 03/07/2006, 13h33

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