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 :

scanf : Expression régulière


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 33
    Par défaut scanf : Expression régulière
    Bonjour,

    Je lis un fichier avec fscanf, dans ce fichier il y a trois champs par ligne séparés par des ;
    Lorsque que je veux lire tout la ligne, aucun problème mais j'utilise une expression régulière dans le fscanf c'est n'importe quoi :
    fscanf(inputF, "%[^;]s\n", buffer)
    >>> ça me renvoie toujours le premier champ de la premiere ligne. Ce fscanf est dans une boucle (du nombre de lignes). Normalement il devrait me renvoyer le premier champ de chaque ligne.

    Je comprend pas, si j’enlève [^;], il me récupère chaque ligne.
    La première question c'est pourquoi ça revient toujours au début du fichier.

    Merci.

  2. #2
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 484
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 484
    Par défaut
    Bonjour,

    Citation Envoyé par Sin-an Voir le message
    Je lis un fichier avec fscanf, dans ce fichier il y a trois champs par ligne séparés par des ;
    Lorsque que je veux lire tout la ligne, aucun problème mais j'utilise une expression régulière dans le fscanf c'est n'importe quoi :
    fscanf(inputF, "%[^;]s\n", buffer)
    Il a un « s » en trop après « [^;] ». Ce dernier est un spécificateur en lui-même.

    D'autre part, scanf() permet de lire une chaîne de caractères appartenant à une plage, mais il ne s'agit pas à proprement parler d'une expression régulière.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 33
    Par défaut
    En enlevant le s ça ne change rien, quoique je mettre, le fichier revient au début

    Pour être plus précis, dans le fichier que je lit on a toujours:
    champ1_1;champ2_1;champ3_1
    champ1_2;champ2_2;champ3_2
    champ1_3;champ2_3;champ3_3
    ...
    champ1_nbLigne;champ2_nbLigne;champ3_nbLigne

    Je vois pas pourquoi le fscanf ne fonctionne pas

  4. #4
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 484
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 484
    Par défaut
    Enlève également le « \n » dans ton scanf().

    Mais surtout, une fois le « ; » atteint, celui-ci reste dans le tampon de l'entrée standard puisqu'il ne fait pas partie de ton expression. Donc, à chaque tour de boucle, ton scanf() reste bloqué dessus. Essaie de le passer avec un getchar().

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 33
    Par défaut
    J'y avais pensé. Je viens de le refaire et ça marche (avec ou sans le \n), en fait ça venait surement du s après le %[^;]
    Je te remercie pour ta contribution.

Discussions similaires

  1. [RegEx] Expression régulières : Balises <SCRIPT>
    Par Gwipi dans le forum Langage
    Réponses: 2
    Dernier message: 24/04/2006, 23h25
  2. Expression réguliére
    Par Mad_Max dans le forum Langages de programmation
    Réponses: 2
    Dernier message: 16/09/2003, 18h17
  3. [expression régulière] mon cerveau fait des noeuds..
    Par nawac dans le forum Algorithmes et structures de données
    Réponses: 7
    Dernier message: 27/05/2003, 10h06
  4. Expressions réguliéres
    Par Tooms dans le forum Langage
    Réponses: 4
    Dernier message: 06/12/2002, 18h42
  5. Réponses: 5
    Dernier message: 11/06/2002, 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