CSV 파일을 입력으로 사용하여 현재 값을 수정 (계산 수행)하고 다시 출력 할 수있는 프로그램을 작성하려고합니다. CSV 형식으로 새 값을 추가합니다.CSV 파일 가져 오기, 편집 및 수정 된 값으로 출력
큰 파일을 허용하기 때문에 값이 저장되는 구조체는 2D 벡터입니다.
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();
}
, I 출력 전에 데이터, 내가 Excel에서 csv 파일이기 때문에 특정 열 (열 24, 25, 48, 49의 값을받는 함수를 만들려고하고 있어요 형식 - 행 및 열)을 사용하고 여러 계산을 수행합니다. 본질적으로, 나는 특정 가치에 접근 할 수 있어야한다.
열 24의 첫 번째 줄에서 하나의 값을 선택해 보겠습니다. pop_back을 사용하면 처음부터 가져올 때이 큐를 채울 때 push_back을 사용하여 뒤에서 값을 밀어 넣은 것으로 간주 할 수 있습니다. . 0부터 시작하기 때문에 pop_back (23)과 비슷합니까? 원래 파일의 1 행 24 열에 해당하는 값을 제공하겠습니까?
도와
, 여기에 액세스 할 수있는 데이터가 파일![original csv file](https://i.stack.imgur.com/uUGHj.png)
임의의 열 인덱스에서 액세스하려면'std :: deque' 대신'std :: vector'를 사용하십시오. –
@ πάνταῥεῖ deque는 벡터처럼 무작위 접근을 허용합니다 ... –
@ Mr.WorshipMe 좋아요, 왜 여기에 그것을 사용해야하는지 이유는 모르겠습니다. –