[英]how can I specify file directory for csv file in c++?
我不太擅長c ++,但是我需要對csv文件中的數據執行操作。
該文件的格式為“天數與分類”,例如,
revenues,profit,volume
481.21,144.36,30
449.13,134.74,28
544.11,163.23,34
368.93,110.68,23
因此,第一行指定分類,從第二行開始向前注冊day1,day2,day3等。
.cpp .csv和可執行程序位於同一目錄中,但是我懷疑它無法正確讀取我的文件。
所以我做了一個簡單的測試,並編寫了以下幾行代碼,以查看它是否可以按天數和分類數打印數據,但是到處都是0
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
ifstream fin("data.csv");
int days = 1;
double revenues,profit,volume;
while (fin >> revenues >> profit >> volume){
O[1][days] = revenues;
O[2][days] = profit;
O[3][days] = volume;
days++;
}
for (int t = 1; t <= days; t++){
for (int i = 1; i <= 3; i++){
cout << O[i][t] << " ";
}
cout << endl;
}
.cpp文件所在的位置並不重要。 .exe文件所在的位置(將執行的編譯代碼)很重要。 如果.exe和.csv文件都在同一目錄中,那么一切都很好。
你的問題是你的閱讀方式。 如果進行快速調試,您將看到while塊永遠不會執行,因為(fin >> revenues >> profit >> volume)
將從第一次失敗。 原因是流的提取運算符>>
的工作方式。 您可以在任何地方(如此處 )找到更多詳細信息。 簡短的故事:由於值之間用逗號分隔,因此無法從流中讀取雙精度值。 它將讀取一個字符串,直到顯示一個空格(包括逗號)為止,並且它將嘗試將該字符串解析為雙精度,並且它將失敗。
您應該嘗試類似逐行閱讀的方法。 您將線分為三個值並使用它們。
或者,您可以讀取字符串,直到逗號為止,然后將這些字符串解析為雙精度值。 我已經寫了一些代碼:
string line;
while (fin.good()){
std::getline (fin, line);
stringstream line_stream(line);
string value;
std::getline (line_stream, value, ',');
O[1][days] = atof(value.c_str());
std::getline (line_stream, value, ',');
O[2][days] = atof(value.c_str());
std::getline (line_stream, value, ',');
O[3][days] = atof(value.c_str());
days++;
}
std::getline()
讀取字符串,直到換行符或','。
或者,您可以簡單地在C ++中搜索一些專用的CSV庫並直接使用它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.