克服下载CSV文件进行分析时的问题.Linux与Windows新品Charachter



我正试图使用历史股价分析股票数据。这些数据可以从雅虎财经下载(https://finance.yahoo.com/quote/AAPL/history?p=AAPL)作为CSV文件。然而,当我下载文件时,它被组织为一行,而不是在每行的末尾用新行分隔。我读到这是因为不同的操作系统使用不同的字符来表示新行。当下载文件或在文本编辑器中时,有没有办法解决这个问题,或者我应该修改我的代码以适应下载文件的格式。我在Windows 10上用C++编码,并在记事本中查看文件。(我也是StackOverFlow的新手,所以非常感谢您提出问题。)

示例:代码应该如何进行

2017-10-16157.899994160.000000157.649994159.880005159.30731224121500

2017-10-17159.779999160.869995159.229996160.470001159.89520318997300

2017-10-18160.419998160.710007159.600006159.759995159.18772916374200

2017-10-19156.75000000157.00002155.020004155.979996155.42128042584200

2017-10-20156.610001157.750000155.960007156.250000155.69030823974100

如何下载

2017-10-16157.899994160.000000157.649994159.880005159.307312241215002017-10-17159.779999160.869995159.229996160.470001159.895203189973002017-10-18160.419998160.710007159.600006159.759995159.187729163742002017-10-19156.7500000157.080002155.020004155.979996155.421280425842002017-10-20156.610001157.7500000155.960007156.2500000155.69030823974100

我要在文件中读取的代码

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();

}

我解决了这个问题。为了在Mac、Windoxs或Unix等平台之间转换EOL行结尾,请下载Notepad++等文本编辑器。在notepad++中打开文件,然后转到编辑选项卡。找到EOL转换按钮并使用它转换文件。

最新更新