2009-07-02 6 views
6

Quelle est la meilleure façon de lire dans un fichier délimité par des tabulations en C++ et de stocker chaque ligne en tant qu'enregistrement? Je cherchais une librairie open source pour m'y aider, mais je n'ai pas réussi, donc j'ai l'impression que je vais devoir écrire la mienne.Lecture de fichiers délimités en C++

+1

J'ai été étonné de constater que lorsque je cherchais cela, je n'arrivais pas à extraire du code quelque part pour une chose aussi simple. Quoi qu'il en soit, j'ai écrit un blog pour ma solution (basé sur d'autres réponses sur Stack Exchange) [C++ Tidbits] (http://goo.gl/y0bOVv) – Wybird666

Répondre

17
typedef vector<vector<string> > Rows; 
Rows rows; 
ifstream input("filename.csv"); 
char const row_delim = '\n'; 
char const field_delim = '\t'; 
for (string row; getline(input, row, row_delim);) { 
    rows.push_back(Rows::value_type()); 
    istringstream ss(row); 
    for (string field; getline(ss, field, field_delim);) { 
    rows.back().push_back(field); 
    } 
} 

Ceci vous aidera à démarrer. Il ne vérifie pas que chaque ligne a le même nombre de champs, permet d'échapper field_delim, etc.

+0

ce code fonctionne dans le studio visuel. l'erreur est l'erreur "C4430: spécificateur de type manquant - int supposé". J'ai inclus string.h – tumchaaditya

+0

Le code compile bien sur CentOS avec g ++. Vous ne savez pas ce que vous n'avez pas ajouté pour le faire fonctionner – thaweatherman

5

Il n'y a aucun problème à utiliser les iostreams - vous pouvez lire chaque ligne avec getline dans une chaîne, puis utiliser stringstream sur cette chaîne pour parcourir les champs.