Чтение файлов с разделителями в C ++

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


person Mr. Will    schedule 02.07.2009    source источник
comment
Я был поражен тем, что когда я искал это, я не смог просто взять откуда-то код для такой простой вещи. В любом случае, я написал блог о своем решении (на основе других ответов на Stack Exchange) C ++ Tidbits   -  person Wybird666    schedule 24.07.2014


Ответы (3)


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 и т. Д.

person Community    schedule 02.07.2009
comment
этот код работает с ботом в Visual Studio. ошибка - ошибка C4430: отсутствует спецификатор типа - предполагается int. Я включил string.h - person tumchaaditya; 26.04.2012
comment
Код отлично компилируется на CentOS с g ++. Не уверен, что вы не добавили, чтобы это работало - person thaweatherman; 22.07.2013

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

person EFraim    schedule 02.07.2009

В статье CSV_application_support перечислены несколько библиотек.

person Etienne PIERRE    schedule 03.07.2009