Я пытаюсь написать программу, которая принимает файл CSV в качестве входного файла, чтобы я мог изменять (выполнять вычисления) значения, которые присутствуют и выводить их снова в формате CSV с новыми значениями на нем.Импортируйте CSV-файл, отредактируйте его и выведите с измененными значениями
Структура, в которой хранятся значения, является двумерным вектором, поскольку она позволяет создавать большие файлы.
struct data_t: deque <deque <float> >
{
typedef deque <deque <float> > ::iterator record_iterator;
typedef deque <float> ::iterator field_iterator;
bool load(const string& filename);
bool save(const string& filename);
bool save(ostream& outs);
};
Данные загружены с помощью getline.
bool data_t::load(const string& filename)
{
string s;
ifstream f(filename.c_str());
while (getline(f, s))
{
deque <float> record;
istringstream iss(s);
while (getline(iss, s, ','))
{
float fieldvalue = 0.0f;
istringstream(s) >> fieldvalue;
record.push_back(fieldvalue);
}
this->push_back(record);
}
return f.good();
}
И данные сохраняются с помощью этих двух функций.
bool data_t::save(const string& filename)
{
ofstream f(filename.c_str());
if (!f) return false;
return save(f);
}
bool data_t::save(ostream& outs)
{
for (data_t::record_iterator ri = this->begin(); ri != this->end(); ri++)
{
for (data_t::field_iterator fi = ri->begin(); fi != ri->end(); fi++)
outs << ((fi == ri->begin()) ? "" : ", ") << *fi;
outs << endl;
}
return outs.good();
}
Теперь , прежде чем я выводить данные, Я пытаюсь создать функцию, которая принимает значения из определенных столбцов (колонны 24, 25 и 48, и 49, так как это CSV-файл в Excel формат - строки и столбцы) и выполняет несколько вычислений. По сути, мне нужно иметь доступ к определенным значениям.
Давайте просто попытаться выбрать одно значение из первой строки колонки 24. Если я использую pop_back, это может работать учитывая, что я толкнул значение со спины с помощью push_back при заполнении Deque при импорте в первую очередь , Это что-то вроде pop_back (23), так как оно начинается с 0? Будет ли это предоставлять значение, соответствующее строке 1, столбцу 24 в исходном файле?
Чтобы помочь, вот снимок того, как организованы данные в файле
Используйте 'std :: vector' вместо' std :: deque' для доступа к произвольным столбцам. –
@ πάνταῥεῖ deque позволяет случайный доступ, как вектор ... –
@ Mr.WorshipMe Хорошо, я действительно не вижу причины, почему его использовать здесь. –