簡體   English   中英

如何在c ++中為csv文件指定文件目錄?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM