#c #csv #ifstream #getline
Вопрос:
Я пытаюсь прочитать CSV-файл, проблема в том, что каждый раз, когда программа читает строку и пытается разделить ее запятыми, она, по-видимому, пропускает первый токен. Почему это так?
void readCSV(string path) {
ifstream file;
string line, cell;
stringstream ss;
file.open(path);
if (file.fail()) {
throw runtime_error("Cannot read file");
}
while (getline(file, line)) {
ss << line;
while (getline(ss, cell, ',')) {
cout << cell << " ";
}
cout << endl;
ss.str(string());
ss.clear();
}
file.close();
}
Содержимое CSV-файла:
a,b,c,d,e
1,2,3,4,5
Выход:
b c d e
2 3 4 5
Комментарии:
1. Я не могу воспроизвести вашу ошибку. Ваш код отлично работает для меня.
2. вы уверены, что во входном файле нет пробелов? (хотя это дало бы другой результат)
3. По-моему, все в порядке. Вы уверены, что это тот код, который вы запускаете? Вы внесли какие-то изменения и забыли скомпилировать?
4. Вы должны попытаться отладить свой код и пошагово узнать, какие значения в ваших переменных, если вы используете Windows с помощью Visual Studio, вы можете использовать встроенный отладчик, а в Linux вы можете использовать GDB/LLDB.