2013-11-05 58 views
0

這裏有一段代碼,我用它來從data.csv文件導入我的數據,到24個變量:導入選項卡和換行分隔的CSV數據到變量

#include <iostream> 
#include <fstream> 
using namespace std; 

double xa = 0; 
double ya = 0; 
double Ta = 0; 
double Ca = 0; 
double Ma = 0; 
double Da = 0; 

double xb = 0; 
double yb = 0; 
double Tb = 0; 
double Cb = 0; 
double Mb = 0; 
double Db = 0; 

double xc = 0; 
double yc = 0; 
double Tc = 0; 
double Cc = 0; 
double Mc = 0; 
double Dc = 0; 

double xd = 0; 
double yd = 0; 
double Td = 0; 
double Cd = 0; 
double Md = 0; 
double Dd = 0; 


//__________________________________________________ 

int trash = 0; // ifstream bug (?) stuff 

//___________________________________ 

int main() { 


    ifstream ifs ("data.csv"); ///LOADING 
if (!ifs) 
    // process error 
ifs >> trash; 
ifs >> xa ; 
ifs >> ya ; 
ifs >> Da ; 
ifs >> Ma ; 
ifs >> Ca ; 
ifs >> Ta ; 
ifs >> xb ; 
ifs >> yb ; 
ifs >> Db ; 
ifs >> Mb ; 
ifs >> Cb ; 
ifs >> Tb ; 
ifs >> xc ; 
ifs >> yc ; 
ifs >> Dc ; 
ifs >> Mc ; 
ifs >> Cc ; 
ifs >> Tc ; 
ifs >> xd ; 
ifs >> yd ; 
ifs >> Dd ; 
ifs >> Md ; 
ifs >> Cd ; 
ifs >> Td ; 

當然(我猜... ,)它只能使用CSV結構(每行包含一個新的單一數據:)

63.64474122 
5.21472834 
0.40511019 
0.26155648 
0.00000000 
0.00000000 
34.45902482 
15.62249852 
0.22086168 
0.00000000 
0.44580498 
0.00000000 
82.11020306 
14.02709406 
0.50748794 
0.00000000 
0.00000000 
0.15917872 
0.00000000 
0.00000000 
0.00000000 
0.00000000 
0.00000000 
0.00000000 

出於顯而易見的實際原因,我想用這個文件結構爲CSV(製表和newlines-分開):

63,64474122 5,21472834 0,40511019 0,26155648 0,00000000 0,00000000 
34,45902482 15,62249852 0,22086168 0,00000000 0,44580498 0,00000000 
82,11020306 14,02709406 0,50748794 0,00000000 0,00000000 0,15917872 
0,00000000 0,00000000 0,00000000 0,00000000 0,00000000 0,00000000 

可能有人幫助我嗎?

+0

對於這個例子中的逗號感到抱歉,我的意思是浮點數! –

回答

1

您的代碼(如糟糕,因爲它是)應該很好地工作這兩個文件。 iostream輸入操作符對待輸入作爲,這意味着,對於類型,如intdouble他們不關心的值的方式分離(並以換行或空白)。現在

,左看右看,我看到第二個文件使用逗號而不是小數點。有3種方法可以處理這個問題:

  • 您可以強制的語言環境是一個把逗號作爲小數點(見this question
  • 可以預處理文件中使用腳本通過程序讀取之前。
  • 最後,你可以看到每個號碼爲std::string變量,然後再使用std::istringstream其轉換爲double

無論如何,您應該認真考慮閱讀iostream的用法。至少你應該檢查輸入錯誤。不,不存在「ifstream bug」

+0

嗯,是我的錯誤,我知道......但是,對於第二個文件結構(表格),此代碼不起作用。你提到「換行」和「空白」作爲分隔符,它不與空白,以及...對不起,是這樣一個神祕的野生C++用戶做它,那真的不是我的專業... –

+1

請參見上面的說明。 –

+0

謝謝,這是我的錯誤...我測試的文件使用了小數點(不是逗號),沒有正確加載......但很高興知道我可以使用逗號...... –

相關問題