【发布时间】:2017-11-16 05:32:41
【问题描述】:
我正在尝试使用历史股票价格分析股票数据。这些数据可以从 Yahoo Finance(https://finance.yahoo.com/quote/AAPL/history?p=AAPL) 下载为 CSV 文件。但是,当我下载文件时,它被组织为一行,并且在每一行的末尾没有被新行分隔。我读过这是因为不同的操作系统使用不同的字符来表示新行。下载文件或在文本编辑器中是否有办法克服这个问题,或者我应该修改我的代码以适应文件下载的格式。我在 Windows 10 上用 C++ 编码并在记事本中查看文件。 (我也是 StackOverFlow 的新手,因此非常感谢您提出问题的建议。)
示例: 代码应该是怎样的
2017-10-16,157.899994,160.000000,157.649994,159.880005,159.307312,24121500
2017-10-17,159.779999,160.869995,159.229996,160.470001,159.895203,18997300
2017-10-18,160.419998,160.710007,159.600006,159.759995,159.187729,16374200
2017-10-19,156.750000,157.080002,155.020004,155.979996,155.421280,42584200
2017-10-20,156.610001,157.750000,155.960007,156.250000,155.690308,23974100
如何下载
2017-10-16,157.899994,160.000000,157.649994,159.880005,159.307312,241215002017-10-17,159.779999,160.869995,159.229996,160.470001,159.895203,189973002017-10-18,160.419998,160.710007,159.600006,159.759995,159.187729,163742002017-10-19,156.750000 ,157.080002,155.020004,155.979996,155.421280,425842002017-10-20,156.610001,157.750000,155.960007,156.250000,155.690308,239741>p>
我在文件中读取的代码
void Stock::readData(filename){
ifstream stream;
stream.open(fileName);
if(stream.fail()){
cout << "The file " << fileName <<" failed to open." << endl;
return;
}
string line ="";
cout << line << endl;
while(!stream.eof()){
// cout << '*' << endl;
getline(stream,line);
//cout << line << endl;
string parsed[7];
int num = Spliter(line, ',', parsed, 7);
string tempDate;
float tempOpen;
float tempHigh;
float tempLow;
float tempClose;
float tempCloseAdj;
float tempVolume;
/*for(int i=0; i<num; i++){
cout << parsed[i] << endl;
}*/
tempDate = parsed[0];
tempOpen = stof(parsed[1]);
tempHigh = stof(parsed[2]);
tempLow = stof(parsed[3]);
tempClose = stof(parsed[4]);
tempCloseAdj = stof(parsed[5]);
tempVolume = stof(parsed[6]);
/*
cout <<(tempDate) << " ";
cout << (tempOpen)<< " ";
cout << (tempHigh)<< " ";
cout << (tempLow)<< " ";
cout << (tempClose)<< " ";
cout << tempCloseAdj<< " ";
cout << (tempVolume) << endl;
*/
vector<float> v;
dates.push_back(tempDate);
data.push_back(v);
data[numberOfDays].push_back(tempOpen);
data[numberOfDays].push_back(tempHigh);
data[numberOfDays].push_back(tempLow);
data[numberOfDays].push_back(tempClose);
data[numberOfDays].push_back(tempCloseAdj);
data[numberOfDays].push_back(tempVolume);
// cout << '#' << endl;
numberOfDays++;
}
stream.close();
}
【问题讨论】:
-
你的代码 sn-p 在哪里? stackoverflow.com/help/how-to-ask
-
能否提供一个独立于任何标头运行的代码?
Spliter来自哪里?如果代码确实包含#includes、main 函数等,那就更好了。具有相同问题的行数尽可能少的工作示例使您的问题更具吸引力和可读性。
标签: c++ linux windows csv delimiter