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 :

lire que les lignes qui commencent par un certain caractère dans un fichier


Sujet :

C++

  1. #1
    Nouveau membre du Club
    Inscrit en
    Janvier 2007
    Messages
    65
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 65
    Points : 37
    Points
    37
    Par défaut lire que les lignes qui commencent par un certain caractère dans un fichier
    Salut à tous

    je cherche le moyen de ne lire que les lignes qui commencent par un ff dans un fichier (ce qui me permettrais de ne pas lire les lignes de commentaires dans ce fichier).
    Voici la fonction que j'utilise pour lire dans mon 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
     
    int fonction() 
    {
    	FILE *stream;
    	char line[180];
    	stream = fopen(fichier_welcome,"r");
     
     
    	printf("              *******ENVOI DU MESSAGE D'ACCUEIL*******\n");
        while ((fscanf(stream, "%[^\n]", line)) != EOF)
    	{  
    		getc(stream);		
    		printf("%s\n", line);
     
     
    	}
     
    	return 0;
    }
    y'aurait-il un moyen d'intégrer cette condition dans fscanf en utilisant les expressions régulières!!!


    Merci beaucoup et très bonne journée!!

  2. #2
    Membre régulier
    Inscrit en
    Mai 2006
    Messages
    330
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 330
    Points : 85
    Points
    85
    Par défaut
    Salut,

    Je ne vois pas trop le sens de la syntaxe "%[^\n]" avec fscanf, ça ne serait pas plutôt "%s\n" ? Si le but est de prendre toute la ligne "fgets" est surement mieux. Il faudrait ensuite rajouter un test pour savoir si la ligne en question commence par "ff"

    Ce test devrait marcher :
    if (line[0] == 'f' && line [1] == 'f')

    fscanf ne sait pas utiliser les expressions régulières, il sait juste extraire des données d'un certain type dans un certain ordre. Pour avoir accès à des fonctionnalités comme les expressions régulières il faut souvent faire appel à des bibliothèques d'extension. Je suppose que boost par exemple le fait, mais si le choix du langage n'est pas imposé le plus rapide pour trier les lignes d'un fichier est sans doute un langage de script comme Perl ou simplement le shell Unix :

    grep '^ff' fichier_welcome

  3. #3
    Nouveau membre du Club
    Inscrit en
    Janvier 2007
    Messages
    65
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 65
    Points : 37
    Points
    37
    Par défaut
    Merci beaucoup, c'est exactement ce qu'il me fallait!!!

    très très bonne journée!!!

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    780
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mai 2006
    Messages : 780
    Points : 1 176
    Points
    1 176
    Par défaut
    en C++ on ferait plutôt un truc dans le style:

    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 <string>
    #include <fstream>
    #include <iostream>
     
    int main(int argc, char* argv[])
    {
        // ouvre le fichier
        std::ifstream fichier("/home/test.txt");
     
        // récupère les lignes une par une 
        std::string ligne;
        while( std::getline( fichier, ligne ) )
        {
            // teste si les deux premiers caractères sont égaux à 'f' (version pas très évoluée.... )
            if( ligne.size() > 2 &&
                ligne[0] == 'f' &&
                ligne[1] == 'f' )
            {
                std::cout << ligne << std::endl;
            }        
        }
     
       return 0;
    }

  5. #5
    Nouveau membre du Club
    Inscrit en
    Janvier 2007
    Messages
    65
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 65
    Points : 37
    Points
    37
    Par défaut
    Merci!!!!!

  6. #6
    Expert éminent sénior
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 275
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 275
    Points : 10 985
    Points
    10 985
    Par défaut
    Avec des streambuf filtrants, il est possible de lire dans le fichier comme si ces lignes n'avaient jamais exister.
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

Discussions similaires

  1. Réponses: 2
    Dernier message: 19/01/2011, 15h41
  2. Réponses: 1
    Dernier message: 30/09/2010, 10h34
  3. Afficher seulement les entrées qui commencent par X
    Par anarchoi dans le forum Langage SQL
    Réponses: 2
    Dernier message: 10/05/2007, 06h31
  4. Ne choisir QUE les lignes qui ont ce critere
    Par elreybubu dans le forum Oracle
    Réponses: 13
    Dernier message: 29/11/2006, 16h59
  5. Parcourir tout les Id qui commence par "dz_"
    Par FMaz dans le forum Général JavaScript
    Réponses: 28
    Dernier message: 24/03/2006, 21h46

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