2017-04-17 64 views
0

我不是很擅長C++,但我需要對csv文件中的數據執行操作。如何在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,第3天.... etc

.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; 
} 
+0

請嘗試創建一個[最小,完整和可驗證示例](http://stackoverflow.com/help/mcve)。並且請記住,數組索引是基於* zero *的(即,一個由三個元素組成的數組,索引爲'0','1'和'2')。 –

+0

你確定你的二進制文件和你的csv文件在同一個文件夾中嗎?並請說明你的錯誤。它打開文件還是什麼不工作? – retinotop

+0

無論你的'cpp'文件在哪裏或你的* binary *程序在哪裏,重要的是你從哪裏運行你的程序。 – Galik

回答

0

在.cpp文件是這並不重要位於。 .exe文件所在位置(編譯後的代碼將被執行)很重要。如果.exe和.csv文件都在同一個目錄中,那麼它就很好。

你的問題是你閱讀的方式;如果您進行快速調試,則會看到while塊永遠不會執行,因爲(fin >> revenues >> profit >> volume)將從第一次失敗。原因在於提取運算符>>對於流的工作方式。更多的細節你可以找到無處不在(如here)。小故事:由於值之間用逗號分隔,因此無法從流中讀取雙精度值。它將讀取一個字符串,直到顯示一個空格(包括逗號),並且它會嘗試將該字符串解析爲double,並且會失敗。

你應該嘗試像逐行閱讀。您將該行分成三個值並使用這些值。

或者你可以讀取字符串,直到逗號和解析這些字符串來增加值。我已經把一些代碼:

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庫並直接使用它。

+0

這有助於我獲得數據中的數字,但打印出的版本與實際數據不符比如說,1 =收入,2 =利潤,3 =數量,然後打印O [2] [25]!=第25天的利潤,實際上就是第31天的收入。 –

+0

@KevvyKim,這可能有多種原因,例如,您將數據放入名爲「O」的陣列或文件格式。請將您的代碼的新版本添加一些數據作爲輸入。 –

+0

我剛剛更新了數據的格式。應用getline的類似概念,但是我應該包含for循環for i和O [i] [days]的日期嗎? –

相關問題