[ifstream] Lire des string constantes (fscanf vs >>)

Lire des string constantes (fscanf vs >>) [ifstream] - C++ - Programmation

Marsh Posté le 07-12-2009 à 20:56:40    

Bonjour,
 
Je voudrais savoir s'il est possible de skipper des strings constantes tout en les checkant avec >> sur un ifstream.
Je pense que vu la clarté de ce que je vient de dire il vaut mieux un exemple :  
 
J'ai un fichier  
exemple.txt


produit achete=patate quantite=3
produit achete=salade quantite=6
...


 
Parsing version C

Code :
  1. FILE * pFile = fopen ("exemple.txt","r" );
  2.   int qte;
  3.   char * pdt = char[256];
  4.   while(...){
  5.     fscanf(pFile,"produit achete=%s quantite=%d>",pdt,&r);
  6.   }


Cela fonctionne.
 
Y a-t-il un moyen de faire quelquechose de similaire en C++ avec une ifstream genre :

Code :
  1. ifstream filein("exemple.txt",ios::in);
  2.   int qte;
  3.   string pdt;
  4.   while(...){
  5.     filein >> "produit achete=" >> pdt >> "quantite=" >> qte >> ws;
  6.   }


Ce qui ne fonctionne pas bien sur pour diverses raisons ( >> a pou séparateur les espaces, pas d'opérateur >> défini pour une string const comme "quantite" ...)
 
Lan Wezel


Message édité par Lan Wezel le 07-12-2009 à 21:05:48
Reply

Marsh Posté le 07-12-2009 à 20:56:40   

Reply

Marsh Posté le 08-12-2009 à 08:35:09    

utilise boost::spirit

Reply

Marsh Posté le 08-12-2009 à 10:26:36    

Snif, je pensais qu'il aurait pu y avoir un moyen plus simple, parce que boost::spirit dans mon cas je trouve que c'est un peu le marteau pour écraser la mouche.
 
Merci en tout cas.

Reply

Marsh Posté le 08-12-2009 à 14:33:12    

spirit v2.1 ets extremement simplifié. Un parser clé/valeur c'ets genre 10 lignes.
 
http://boost-spirit.com/home/?page_id=371

Reply

Marsh Posté le 08-12-2009 à 16:02:40    

J'ai regardé en effet, mais comme il s'agit en fait de sérialisation, je suis en train de regarder si je peux paramétrer l'utilisation de boost::serialization et boost::archive pour réaliser ce que je veux faire.

Reply

Marsh Posté le 08-12-2009 à 17:30:10    

oui ca parait mieux :)

Reply

Sujets relatifs:

Leave a Replay

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