2016-10-11 1 views
0

J'ai un fichier texte avec des informations sur le film, séparées par des virgules. Je fournirai une ligne pour un aperçu:Utilisation de getline pour diviser l'entrée, en utilisant des virgules comme delim

8,The Good the Bad and the Ugly,1966,2 

Je dois prendre cette ligne, et de diviser les différents morceaux par leur virgule pour adapter au format de cette fonction:

void addMovieNode(int ranking, std::string title, int releaseYear, int quantity); 

Les informations du fichier texte est dans l'ordre avec la fonction, mais je ne sais pas comment fonctionne l'opération getline.

Je sais que je peux passer dans le fichier texte comme

getline("moveInfo.txt", string, ","); 

mais comment cela va se traduire en termes de ce qui se passe réellement avec la sortie? J'ai lu le manuel sur le site Web de cplusplus mais cela n'a pas aidé à clarifier beaucoup.

+2

Démarrer [ici] (http://stackoverflow.com/questions/1120140/how-can-i-read-and-parse-csv-files -in-c) – NathanOliver

+1

Attention aux virgules à l'intérieur des champs, comme 'I, Robot' – coredump

+1

Si vous voulez analyser un fichier au format CSV, utilisez un analyseur CSV approprié pour cela, plutôt que de tordre la bibliothèque C++ standard en contorsions, comme cette. –

Répondre

2

Vous pouvez utiliser un string et stringstream:

#include <sstream> 
#include <string> 
#include <fstream> 

ifstream infile("moveInfo.txt");  
while (infile) 
{ 
    std::string line; 
    if (!std::getline(infile, line,',')) break; 
    std::istringstream iss(line); 
    int ranking, releaseYear, quantity; 
    std::string title; 
    if (!(iss >> ranking >> title >> releaseYear >> quantity)) { break; } 
} 
+1

Même commentaire que ci-dessus, cette rupture avec 'I, Robot' – coredump

+0

si (! (Iss >> classement >> titre >> releaseYear >> quantité)) Que fait cette ligne? – Whatamia

+0

Cela ressemble au format standard pour cin << or cout>>, est ce fonctionnellement faire la même chose que chaque entrée est cassée? – Whatamia