2016-12-05 15 views
0

ファイルから何かを読み込み、同じファイルに書き込もうとしています。 私はこのような何かを持っていたと不思議働いていた:それはdoesnの場合読み込みしようとした後にcsvファイルに書き込む

int main() { 

    fstream fp; 
    string outString; 
    string filePath = "test.csv"; 


    string line, csvItem; 
    int numberOfGames = 0; 

    fp.open(filePath, ios::app | ios::in | ios::out); 
    if (fp.is_open()) { 
     while (getline(fp, line)) { 
      istringstream myline(line); 
      while (getline(myline, csvItem, ';')) { 
       cout << csvItem << endl; 
       if (csvItem != "" && csvItem.at(0) == 'g') { 
        numberOfGames++; 
       } 
       else 
        break; 
      } 
     } 
    } 

    if (numberOfGames == 0) { 
     outString = "Game;Year;AUS;ENG;FRA;GER;ITA;RUS;TUR\n"; 
    } 

    outString += "g"; 
    outString += to_string(numberOfGames + 1); 
    outString += ";1901;3;3;4;3;3;3;3\n"; 
    outString += ";1902;3;3;4;3;3;3;3\n"; 

    fp << outString; 

    fp.close(); 


    return 0; 
} 

ファイルが作成されます。私はそれがうまく読んだとき、それは書き込みません、読み取り部分を持っていた、その後

int main() { 

    fstream fp; 

    string filePath = "test.csv"; 
    string outString; 

    outString += "g1;1901;3;3;4;3;3;3;3\n"; 
    outString += ";1902;3;3;4;3;3;3;3\n"; 

    fp.open(filePath, ios::app | ios::in | ios::out); 
    fp << outString; 
    fp.close(); 
    return 0; 
} 

をそれ以外の場合は、それが読み取られます。 読み取られた部分は、この質問に対する受け入れられた回答に基づいています。 Reading a particular line in a csv file in C++

ありがとうございました!

答えて

0

ファイルの最後に達すると、fp.eof()== trueとなります。 fp.tellg()(read/get position)とfp.tellp()(write/put position)によって返された値をチェックすると、その時点で無効であることがわかります。あなたが必要なもの

あなたがEOFに達すると、あなたが読み始める前に、ストリームの状態をリセットすることです:

fp.clear(); 
+0

非常サイコーありがとうございます! :D –

関連する問題