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 :

récupération de données d'un fichier .txt


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau candidat au Club
    Femme Profil pro
    Inscrit en
    Juin 2013
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2013
    Messages : 1
    Par défaut récupération de données d'un fichier .txt
    Bonjour,

    je cherche a récupérer (extraire) des chaines de caractères d'un fichier .txt.

    exemple:

    Je possède un code source de page web dans un fichier .txt

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <meta charset="utf-8">
    <meta name="description" content="AniChart | The Best Place For Finding Upcoming Anime">
    <meta name="keywords" content="Anime,Chart">
    et je souhaite récupérer dans une variable juste : "AniChart | The Best Place For Finding Upcoming Anime".
    Mais voila je n'ai aucune idée de comment faire et je ne trouve rien sur le net comme réponse a ma question.

    Merci d'avance.

    Cordialement

  2. #2
    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
    Soit tu utilises un parser html, soit tu la récupère à la main.

    à la main, tu as intérêt à utiliser std::getline(stream, string&, char délimiteur).
    En effet, l'html peut ne pas contenir de "\n" aux bons endroits.
    L'idée sera d'utiliser '<' comme délimiteur, puisque tu sais que seules les balises commencent avec.

    Ton code ressemblera à la lecture ligne à ligne, mais par balises (ouvrante ou fermante).
    les chaines lues commenceront par le nom de la balise et il suffira d'extraire la chaine voulue via une regex (en faisant attention aux \" éventuellement présents)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    //analyse des chaines telles que: <meta name="description" content="AniChart | The Best Place For Finding Upcoming Anime">
    std::string extract_meta(istream& source, std::string const& name) {
        std::string balise;
        while (std::getline(source, balise, '<') {
            if (balise.substr(0,4)!="meta") continue;
            if (balise.find("name=\""+name+'\"')==std::string::npos ) continue;
            //pseudocode
            retourner la valeur de content avec une regex d'extraction proche de: "content\"(.*)\"
        }
        return "";
    }
    Ce n'est pas la solution idéale pour lire plusieurs méta, parce que le stream sera modifié.
    Dans ce cas, il faudrait plutôt créer une classe de méta, et parser un vecteur de meta.
    Une méta étant essentiellement descriptible comme une map d'attributs, eux différentes normes html près.

  3. #3
    Membre éprouvé

    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 448
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 448
    Par défaut
    Il doit bien y avoir des classes gérant les expressions régulières en c++.

  4. #4
    Membre émérite
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2014
    Messages
    345
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2014
    Messages : 345
    Par défaut
    Oui, <regex> à partir de C++11.

  5. #5
    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
    C'est juste qu'une regex à l'aveugle sur un fichier html complet, tu ne vas jamais t'en sortir.
    C'est pour ca que, dans ce cadre précis, getline() par balise est utile pour réduire la zone analysée

  6. #6
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2013
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2013
    Messages : 9

Discussions similaires

  1. Récupération des données d'un fichier txt
    Par Angelive dans le forum C++
    Réponses: 3
    Dernier message: 15/09/2012, 19h03
  2. Réponses: 5
    Dernier message: 12/04/2011, 15h42
  3. Récupération de données dans un fichier .txt
    Par Crackos dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 30/09/2010, 14h15
  4. Réponses: 6
    Dernier message: 20/01/2008, 16h32
  5. Récupération des données d'un fichier .txt
    Par vincou dans le forum VB.NET
    Réponses: 3
    Dernier message: 24/07/2007, 10h55

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