2009-07-02 3 views
6

Каков наилучший способ чтения в файле с разделителями табуляции на C++ и хранить каждую строку в виде записи? Я искал библиотеку с открытым исходным кодом, чтобы помочь с этим, но не увенчался успехом, поэтому мне кажется, что мне придется писать самостоятельно.Чтение разделенных файлов в C++

+1

Я был поражен тем, что, когда я искал это, я не мог просто вырвать код откуда-то для такой простой вещи. Во всяком случае, я написал блог для своего решения (на основе других ответов на Stack Exchange) [C++ Tidbits] (http://goo.gl/y0bOVv) – Wybird666

ответ

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); 
    } 
} 

Это поможет вам начать работу. Он не делает никаких проверок, что каждая строка имеет одинаковое количество полей, позволяет избегать field_delim и т. Д.

+0

этот код действительно работает в visual studio. Ошибка - ошибка «C4430: отсутствующий тип спецификатора - int предполагается». Я включил string.h – tumchaaditya

+0

Код компилируется в CentOS с g ++. Не уверен, что вы не добавили, чтобы заставить его работать – thaweatherman

5

Нет проблем при использовании iostreams - вы можете прочитать каждую строку с getline в строке, а затем использовать stringstream для этой строки для перебора полей.

Смежные вопросы