Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1470 connectés 

  FORUM HardWare.fr
  Programmation
  C

  Extraction de chaînes avec sscanf et des expressions régulières

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Extraction de chaînes avec sscanf et des expressions régulières

n°1514125
kason
Ab uno disce omnes
Posté le 13-02-2007 à 15:27:29  profilanswer
 

Une question sur les expressions régulières en langage C:
 
Un fichier contient des lignes formatées de la manière suivante :
xxxxx#$yyyyyy#$
 
Je souhaite récupérer les données xxxx et yyyyy, qui sont de longueurs variables. #$ est un séparateur. J'ai réussi à récupérer la première donnée en utilisant la commande suivante :
 

Code :
  1. sscanf(lLigne, "%[^#$]s", lTitre);


 
La première donnée xxxxx est stockée dans la variable lTitre. Par contre, je sèche sur la récupération de la seconde donnée (yyyyyy), stockée entre les 2 séparateurs. Quel est le format à utiliser pour l'expression régulière ?

mood
Publicité
Posté le 13-02-2007 à 15:27:29  profilanswer
 

n°1514127
_darkalt3_
Proctopathe
Posté le 13-02-2007 à 15:32:16  profilanswer
 

strtok ou approchant ?


---------------
Töp of the plöp
n°1514134
Taz
bisounours-codeur
Posté le 13-02-2007 à 15:36:45  profilanswer
 

y utilise pcre

n°1514147
rufo
Pas me confondre avec Lycos!
Posté le 13-02-2007 à 15:53:33  profilanswer
 

Peut-être qu'en s'inspirant de l'exemple donné pour scanf sur http://xrenault.developpez.com/tutoriels/c/scanf/ le dernier paragraphe avant la conclusion...

n°1515076
matafan
Posté le 15-02-2007 à 15:02:22  profilanswer
 

"%[^#]#$%[^#]"
 
Edit : et au fait, ce ne sont pas des expressions régulières.


Message édité par matafan le 15-02-2007 à 15:03:01
n°1515794
kason
Ab uno disce omnes
Posté le 16-02-2007 à 21:27:34  profilanswer
 

Merci matafan.
 
titre#$contenu#$
 
lTitle:titre
lContent:contenu
 
Voici une solution en utilisant sscanf uniquement:

Code :
  1. sscanf(lLine, "%[^#$]s", lTitle);
  2. sscanf(lLine, "%*[^#]#$%[^#]", lContent);


 
Une autre solution avec strtok:

Code :
  1. ltmp = strtok (lLine,"#$" );
  2. strncpy(lTitle, ltmp, 50);
  3. ltmp = strtok (NULL,"#$" );
  4. strncpy(lContent, ltmp, 100);


 
Note: attention à la vérification des pointeurs (!= NULL)


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  Extraction de chaînes avec sscanf et des expressions régulières

 

Sujets relatifs
Selection de sous chainesFormer le nom d'un objet a partir de chaines de caractères (VB)
Expressions Régulières dans une fonction[ RESOLU] Suppression de chaînes de caractères
Expressions régulièresExtraction en csv
[DOS] Extraction de variablemanip de chaines pour supprimer caractères
Plus de sujets relatifs à : Extraction de chaînes avec sscanf et des expressions régulières


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR