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

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

Marsh Posté le 13-02-2007 à 15:27:29    

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 ?

Reply

Marsh Posté le 13-02-2007 à 15:27:29   

Reply

Marsh Posté le 13-02-2007 à 15:32:16    

strtok ou approchant ?


---------------
Töp of the plöp
Reply

Marsh Posté le 13-02-2007 à 15:36:45    

y utilise pcre

Reply

Marsh Posté le 13-02-2007 à 15:53:33    

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...

Reply

Marsh Posté le 15-02-2007 à 15:02:22    

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


Message édité par matafan le 15-02-2007 à 15:03:01
Reply

Marsh Posté le 16-02-2007 à 21:27:34    

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)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed