2013-08-06 43 views
0

我試圖寫回到以前在程序中讀取的csv文件。該方案目前看起來是這樣的:如何寫回剛纔讀取的csv文件(C++)?

ifstream file; 

    file.open ("file"); 

    e=0; 

    while (file.good()) { 

     getline (file, infor,','); 
     istringstream (infor) >> infoc; 
     var1[e]=infoc; 

     getline (file, infor,','); 
     istringstream (infor) >> infoc; 
     var2[e]=infoc; 

     getline (file, infor,','); 
     istringstream (infor) >> infoc; 
     var3[e]=infoc; 

     getline (file, infor,','); 
     istringstream (infor) >> infoc; 
     var4[e]=infoc; 

     getline (file, infor,','); 
     istringstream (infor) >> infoc; 
     var5[e]=infoc; 

     getline (file, infor,','); 
     istringstream (infor) >> infoc; 
     var6[e]=infoc; 

     getline (file, infor,','); 
     istringstream (infor) >> infoc; 
     var7[e]=infoc; 

     getline (file, infor,','); 
     istringstream (infor) >> infoc; 
     var8[e]=infoc; 

     getline (file, infor,','); 
     istringstream (infor) >> infoc; 
     var9[e]=infoc; 

     getline (file, infor,','); 
     istringstream (infor) >> infoc; 
     var10[e]=infoc; 

     getline (file, infor,','); 
     istringstream (infor) >> infoc; 
     var11[e]=infoc; 

     getline (file, infor,','); 
     istringstream (infor) >> infoc; 
     var12[e]=infoc; 

     getline (file, infor,','); 
     istringstream (infor) >> infoc; 
     var13[e]=infoc; 

     getline (file, infor,','); 
     istringstream (infor) >> infoc; 
     var14[e]=infoc; 

     getline (file, infor,','); 
     istringstream (infor) >> infoc; 
     var15[e]=infoc; 

     ++e; 

    } 



    var1[e] = var1[e] + v1; 
    var2[e] = var2[e] + v2; 
    var3[e] = var3[e] + v3; 
    var4[e] = var4[e] + v4; 
    var5[e] = var5[e] + v5; 
    var6[e] = var6[e] + v6; 
    var7[e] = var7[e] + v7; 
    var8[e] = var8[e] + v8; 
    var9[e] = var9[e] + v9; 
    var10[e] = var10[e] + v10; 
    var11[e] = var11[e] + v11; 
    var12[e] = var12[e] + v12; 
    var13[e] = var13[e] + v13; 
    var14[e] = var14[e] + v14; 
    var15[e] = var15[e] + v15; 
    //WRITE TO compYTD 

    file.close(); 

之前,我收我想寫新計算的變量回文件的文件,刪除先前讀到的一切。有沒有一個功能可以讓我做到這一點?還有一個單獨的功能,允許我回寫這個文件,添加到已經存在的行嗎?

回答

0

我個人會關閉該文件,然後使用類似這樣寫的新值:

ofstream ofile("file.csv"); 

for(int i = 0; i < e; i++) 
    ofile << var1[i] << ", " << var2[i] << ", " << var3[i] << ", " << ... endl; 

ofile.close(); 

(當然,這將是如果var1var2等人在一個數組或一個向量更容易 - 同在,當然讀它 - 將只是的getlineistringstream一個實例等)

附(到文件的)末尾添加的信息,您可以使用ios_base::app作爲標誌的ofstream 。如此反覆,關閉輸入文件,並打開該outuput在ofstream:你寫的文件

ofstream ofile("file.csv", ios_base::app); 

任何現在會在文件的結尾。

+0

我可以關閉我讀取的文件並打開同一個備份寫入?並將這添加到文件中的現有數據或擦除/覆蓋它? – user2611318

+0

除非您指定了其他內容,'ofstream'會創建一個新的空文件。這就是我提出這種方法的原因。但是,您必須在閱讀完所有數據後執行此操作。如果你想同時讀寫,你將不得不在文件上有兩個不同的名字[好吧,在Unix/Linux/MacOS類型的操作系統中沒有嚴格要求,但它對RELY來說確實不太好] –

+0

不存在這樣的事情作爲打開一個文件在追加模式或東西? – user2611318