2014-04-30 6 views
1

Je travaille sur la lecture des lignes d'un fichier. Chaque ligne suit ce format exact, avec un séparateur |:Meilleure façon de lire dans les champs d'une ligne

4|Get Shorty (1995)|01-Jan-1995||http://us.imdb.com/M/title-exact?Get%20Shorty%20(1995)|0|1|0|0|0|1|0|0|1|0|0|0|0|0|0|0|0|0|0 

J'utilise ifstream et getline pour saisir chaque ligne du fichier. Quel serait le meilleur moyen de saisir tous les champs sur une seule ligne avec n délimiteurs? Cela peut-il être fait avec des chaînes de caractères? Je peux truquer quelque chose en utilisant find et substr, mais ça deviendrait moche assez rapidement, et je ne pense pas qu'il serait capable de prendre en compte une ligne avec un nombre variable de délimiteurs.

Répondre

5

Vous pouvez initialiser un std::istringstream avec la ligne, puis lire les champs avec getline(isstream, field, '|'). Mettez l'appel dans une boucle pour lire les champs jusqu'à ce que le flux échoue:

std::istringstream isstream(line); 
for (std::string s; getline(isstream, s, '|');) 
    // do stuff with s 
+0

veuillez compléter votre réponse avec l'exemple de code complet. Ce sera clair comme ça. – agarwaen

+0

Ah, je ne connaissais pas cette troisième option sur 'getline'! – Bob

+0

@Bob, 'std :: getline' obtient une ligne, cependant' std :: istream :: getline' obtient une ligne partielle (malgré son nom!) –

Questions connexes