views:

888

answers:

3

What is the best way to read in a tab delimited file in C++ and store each line as a record? I have been looking for an open source library to help with this, but have been unsuccessful so it looks like I will have to write my own.

+5  A: 

There is no problem in using iostreams - you could read each line with getline into string, and then use stringstream on that string to iterate over fields.

EFraim
+12  A: 
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);
  }
}

This will get you started. It doesn't do any checking that each row has the same number of fields, allow for escaping field_delim, etc.

Roger Pate
A: 

There are a few libraries listed in wikipedia's article CSV_application_support.

Etienne PIERRE