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 :

C++ parseur de fichier DAT


Sujet :

C++

  1. #1
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Août 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2013
    Messages : 3
    Points : 3
    Points
    3
    Par défaut C++ parseur de fichier DAT
    Bonjour a tous, je suis débutante en c++ et je veux coder un parseur en c++ qui permet de lire un fichier ".dat " dont voici le contenu :
    HV = 999999999;
    NbSommets = 7;
    NbUnites =5;
    NbK=1;
    
    Capacites =
    	[
    	   [[0,0,1,0,0,0,0], 
    		[0,0,1,0,0,0,0],
    		[0,0,0,1,0,0,0],
    		[0,0,1,0,1,0,0],
    		[0,0,0,1,0,1,1],
    		[0,0,0,0,0,0,0],
    		[0,0,0,0,0,0,0]]
    	];
    Probabilites =
    	[[1.0,1.0,1.0,1.0,1.0,1.0,1.0]];
    récupérer ses données et le fermer.

    Merci de m'aider car je sais pas d'où faut-il le commencer ni comment le coder

  2. #2
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 518
    Points
    41 518
    Par défaut
    La première chose à faire, c'est définir ce que le parseur doit retourner quand il lit un tel fichier.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Août 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2013
    Messages : 3
    Points : 3
    Points
    3
    Par défaut
    Bonjour et merci pour votre réponse ce fichier doit retourner un graphe,
    NbSommets indique le nombre de sommets, capacités indique la capacité des chaque arcs, Nbunités permet d'indiquer combien d'unité peut passer du début à la fin du graphe

  4. #4
    Membre régulier
    Homme Profil pro
    Inscrit en
    Mars 2011
    Messages
    94
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 94
    Points : 122
    Points
    122
    Par défaut
    Citation Envoyé par evaro_nathaliya Voir le message
    Merci de m'aider car je sais pas d'où faut-il le commencer ni comment le coder
    Coucou !!
    Personnellement quand je fais une récupération de données depuis un fichier externe, je suis à peu près ce schéma

    1) test d'ouverture (pour une lecture) du fichier. Si raté, retourner l'erreur, sinon continuer. Pour cela j'utilise un objet ifstream. Exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ifstream myfile("C:\\mondossier\\monfichier.monextension");
    Pour tester l'ouverture:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    bool test_ouverture = myfile.is_open();
    2) Ensuite je récupère les lignes du fichier une par une dans un string, avec la fonction getline. Exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    string contenu_de_ma_ligne;
    std::getline(myfile,contenu_de_ma_ligne);
    Pour tester si ce n'est pas la fin du programme, il suffit juste de vérifier le retour de getline.
    Exemple de récupération de toutes les lignes de mon fichier:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    while(getline(myfile,contenu_de_ma_ligne))
    {
        // faire une vérification du contenu de la ligne
    }
    myfile.close(); // si getline nous fait sortir de la boucle, c'est qu'on a atteint la fin du fichier. Donc on ferme le fichier
    3) pour l'inspection de la ligne, tu as de nombreuses fonctions de disponibles.
    Avec l'objet string, tu peux chercher un caractère particulier (ou même un string inclus) via la méthode find:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    size_t position = contenu_de_ma_ligne.find("=");
    if(position != string::npos)
    {
        // si position != string::npos, alors cela veut dire que le string "=" se trouve bien dans la ligne.
    }
    Pour extraire par exemple ce qu'il y a avant ou après le "=", tu peux utiliser la méthode substr:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    if(position != string::npos)
    {
        string avant_egal = contenu_de_ma_ligne.substr(0,position);
        string apres_egal = contenu_de_ma_ligne.substr(position + 1);
    }
    4) imaginons cette fois que tu veuilles récupérer un entier, il faut caster ton string en entier. Pour cela je te recommande d'utiliser un objet istringstream:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    string str_entier = "1234";
    int int_entier;
    istringstream buffer(str_entier);
    buffer >> int_entier; // après cette ligne, int_entier vaudra 1234;
    J'espère que ça te sera utile

  5. #5
    Rédacteur

    Avatar de Davidbrcz
    Homme Profil pro
    Ing Supaéro - Doctorant ONERA
    Inscrit en
    Juin 2006
    Messages
    2 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ing Supaéro - Doctorant ONERA

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 307
    Points : 4 732
    Points
    4 732
    Par défaut
    Boumbata >> C'est bien quand tu as u fichier CSV, éventuellement avec un petit en tête ou toutes les lignes sont de la même forme.

    La c'est plus complique. Ta méthode peut marcher mais ça sera dégueulasse et absolument pas évolutif

    Si le format pouvait être change un poil, je t'aurais dit de partir sur du json, vu qu'il existe des parseurs tout près. La il va falloir se coltiner à la main la création d'un parseur.
    "Never use brute force in fighting an exponential." (Andrei Alexandrescu)

    Mes articles dont Conseils divers sur le C++
    Une très bonne doc sur le C++ (en) Why linux is better (fr)

  6. #6
    Membre régulier
    Homme Profil pro
    Inscrit en
    Mars 2011
    Messages
    94
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 94
    Points : 122
    Points
    122
    Par défaut
    Oui biensûr c'est toujours mieux de passer par des parseurs tout prêts, style tinyxml pour parser des fichiers xml, car déjà tout fait et moins galère pour le développement à long terme.

    Mais:
    - il se peut qu'elle ne puisse pas modifier son fichier d'entrée (il suffit que le client soit un peu chiant ). Et si aucun parseur actuel trouvable sur le net n'est taillé pour son format d'entrée spécifique, il n'y a pas 36 solutions
    - là ce qu'elle demande c'est bien de coder son propre parseur en c++, c'est pour cela que je lui ai proposé des méthodes que j'utilise assez souvent

    Néanmoins oui bonne remarque: faut éviter de se casser la tête si c'est déjà fait

Discussions similaires

  1. Fichier dat : comment l'exploiter ?
    Par denisfavre dans le forum Access
    Réponses: 21
    Dernier message: 02/03/2006, 22h39
  2. Importer un fichier dat dans access ou excel
    Par denisfavre dans le forum Access
    Réponses: 1
    Dernier message: 12/01/2006, 15h39
  3. Les fichiers .DAT
    Par mohamed dans le forum Autres Logiciels
    Réponses: 4
    Dernier message: 13/12/2005, 11h04
  4. exportation : fichiers .dat et .key
    Par Crab dans le forum Autres SGBD
    Réponses: 4
    Dernier message: 13/09/2004, 14h51
  5. parseur de fichier
    Par ronan99999 dans le forum C
    Réponses: 10
    Dernier message: 10/02/2004, 12h46

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