fichier -> tableau

fichier -> tableau - C++ - Programmation

Marsh Posté le 13-07-2010 à 10:44:37    

Salut à tous,
 
je sais que c'est une question naze et que je pourrais trouver, mais je suis en galère de temps et j'espère que l'un de vous sera clément.
 
J'ai un fichier texte formaté comme suit
 

Code :
  1. %Time:1234567890 (tabulation+espace) champ1:123 (espace) champ2:123 (espace+tabulation) champ3:123 (espace+tabulation) champ4:123
  2. puis 'champ1' lignes de 'champ2' entiers, séparés par des tabulations


 
ma question est smple, comment je m'y prends pour récupérer champ1, etc et tous les entiers qui suivent.
 
Merci beaucoup

Reply

Marsh Posté le 13-07-2010 à 10:44:37   

Reply

Marsh Posté le 13-07-2010 à 11:56:42    

Ce n'est pas une question naze. C'est une question fréquente. En anglais cela s'appelle faire du "parsing", et en français du "découpage, "saucissonnage", ou "filtrage".
 
Il existe plusieurs méthodes pour parser un fichier. Celle que je préfère consiste à :
 
- faire une boucle sur tous les caractères d'une ligne,
- bufferiser les caractères jusqu'à un ou plusieurs délimiteurs (dans l'exemple, ce serait jusqu'à une fin de ligne, un espace, ou un deux point), pour obtenir des mots
- voir si le mot est un mot clé ("champ1" )
- bufferiser la suite jusqu'à un ou plusieurs délimiteurs (dans l'exemple, ce serait jusqu'à une fin de ligne, un espace).
 
Cela demande une petite trentaines de lignes de code. C'est de la programmation classique.
 
On peut aussi utiliser les expressions régulières, ou d'autres choses, qui permettent de faire cela en moins de lignes de code.

Reply

Marsh Posté le 13-07-2010 à 18:54:35    

boost::spirit, y a un lecteur de fichier tabulé dnas les exemples (ou sur le blog je sais plus)

Reply

Marsh Posté le 15-07-2010 à 12:40:53    

le code de ton problème :  http://forum.hardware.fr/hfr/Progr [...] m#t1767615
 
utilise la recherche avt de posté !

Reply

Sujets relatifs:

Leave a Replay

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