#include <iostream>
#include <fstream>
#include <string>
#include "filedetail.h"
#include <cstdlib>
#include <vector>
#include <string.h>
using namespace std;
vector<filedetail> a;
void cg();
void fout();
int main()
{
ifstream infile("all_zh_stock_daily.csv");//这里写读取的文件名字
char* temp;
char *token;
char seps[] =",\n\t";
FILE *fp;
fp = fopen("output.csv","w+");
fprintf(fp,"date,symbol,open,high,low,close,volume,outstanding_share,turnover,change_amount,quote_amount");
fclose(fp);
string tempinfile;
string tempdate;
string tempsymbol;
float tempopen;
float temphigh;
float templow;
float tempclose;
float tempvolume;
float tempoutstanding;
float tempturnover;
string tempsymbol2;
filedetail *temp1;
//int test=0;
if(!infile.is_open())
cout<< "no this file" << endl;
getline(infile,tempinfile);
while(!infile.eof())
{
filedetail *tempfd;
getline(infile,tempinfile);
temp = (char*)tempinfile.data();
token = strtok(temp,seps);
tempdate = token;
token = strtok(NULL,seps);
tempsymbol = token;
token = strtok(NULL,seps);
tempopen = atof(token);
token = strtok(NULL,seps);
temphigh = atof(token);
token = strtok(NULL,seps);
templow = atof(token);
token = strtok(NULL,seps);
tempclose = atof(token);
token = strtok(NULL,seps);
tempvolume = atof(token);
token = strtok(NULL,seps);
tempoutstanding = atof(token);
token = strtok(NULL,seps);
tempturnover = atof(token);
tempfd = new filedetail(tempdate,tempsymbol,tempopen,temphigh,templow,tempclose,tempvolume,tempoutstanding,tempturnover);
a.push_back(*tempfd);
//cin.ignore(numeric_limits<streamsize>::max());
if(tempsymbol2.compare(tempsymbol))
{
//test ++;
cg();
fout();
a.clear();
/*if(test == 50000)
{
return 0;
}*/
}
tempsymbol2 = tempsymbol;
}
return 0;
}
void cg() //set every change_amount
{
float cg_am=0.0;
float qc=0.0;
for(int i = 0; i<=a.size(); i++)
{
filedetail *a1;
filedetail *a2;
a1 = &a[i];
string s1;
s1 = a1->getsymbol();
a2 = &a[i+1];
if(i==0)
{
a1->setchange_amount(0);
a1->setQuote_change(0);
}
if(s1.compare(a2->getsymbol()));
{
cg_am =a2->getclose() - a1->getclose();
a2->setchange_amount(cg_am);
qc = cg_am - a1->getclose();
qc = qc;
a2->setQuote_change(qc);
}
}
}
void fout()
{
FILE *fp;
fp = fopen("all_zh_stock_daily.csv","w+");
filedetail *temp;
char *tempout;
string tempt;
//fprintf(fp,"date,symbol,open,high,low,close,volume,outstanding_share,turnover,change_amount,quote_change");
for(int i = 0;i<a.size();i++)
{
temp = &a[i];
tempt = temp->tostring();
tempout = (char*)tempt.data();
fprintf(fp,"\n");
fprintf(fp,tempout);
fprintf(fp,"%%");
temp = new filedetail();
delete temp;
}
fclose(fp);
}
#include "filedetail.h"
#include <string>
#include <sstream>
#include <iostream>
#include "stdtostring.h"
using namespace std;
float filedetail::getopen(void)
{
return open;
}
float filedetail::gethigh(void)
{
return high;
}
float filedetail::getlow(void)
{
return low;
}
float filedetail::getclose(void)
{
return close;
}
filedetail::filedetail(std::string i_data,std::string i_symbol,float i_open,float i_high,float i_low,float i_close,float i_volume,float i_oustanding,float i_turnover)
{
this->data = i_data;
this->symbol = i_symbol;
this->open = i_open;
this->low = i_low;
this->high = i_high;
this->close = i_close;
this->volume = i_volume;
this->outstanding = i_oustanding;
this->turnover = i_turnover;
}
filedetail::setchange_amount(float cg)
{
this->change_amount = cg;
}
string filedetail::getsymbol(void)
{
return this->symbol;
}
filedetail::filedetail()
{
}
float filedetail::getchange_amount(void)
{
return this->change_amount;
}
filedetail::setQuote_change(float qc)
{
this->quote_change = qc;
}
float filedetail::getQuote_change(void)
{
return this->quote_change;
}
string filedetail::tostring()
{
string re;
re.append(this->data);
re.append(",");
re.append(this->symbol);
re.append(",");
string strfloat = to_string(this->open);
re.append(strfloat);
re.append(",");
strfloat = to_string(this->high);
re.append(strfloat);
re.append(",");
strfloat = to_string(this->low);
re.append(strfloat);
re.append(",");
strfloat = to_string(this->close);
re.append(strfloat);
re.append(",");
strfloat = to_string(this->volume);
re.append(strfloat);
re.append(",");
strfloat = to_string(this->outstanding);
re.append(strfloat);
re.append(",");
strfloat = to_string(this->turnover);
re.append(strfloat);
re.append(",");
strfloat = to_string(this->change_amount);
re.append(strfloat);
re.append(",");
strfloat = to_string(this->quote_change);
re.append(strfloat);
//这一串代码都是输出格式的设置
return re;
//this->data + "," + this->symbol + "," + this->change_amount + "," + this->quote_change;
}
/*filedetail::~filedetail()
{
//dtor
}*/
rt...以上是一个从股票文件中读取数据的程序,这个程序要求计算两个数值并且添加到文件末尾。
但是我只想出来了怎么重开一个文件并且把数据写进去的方法……怎么把那两个数值添加到all_zh_stock_daily.csv文件相关的数据后面啊???
数据示例:
date,symbol,open,high,low,close,volume,outstanding_share,turnover
1999-11-10,sh600000,2.2,2.22,2.01,2.07,174085100.0,320000000.0,0.5440159375
1999-11-11,sh600000,2.06,2.12,2.05,2.07,29403500.0,320000000.0,0.0918859375
要算出两个数添加到最后面成为两列……
PS:这个数据很大很大,非常吃内存(
谢谢各位大佬!