尝试阅读,然后在CSV文件上写入

Trying to read AND THEN write on csv file

本文关键字:文件 CSV 然后      更新时间:2023-10-16

我正在尝试从文件中读取某些内容,然后在同一文件中写入。我有这样的东西,并创造了奇迹:

int main() {
    fstream fp;
    string filePath = "test.csv";
    string outString;
    outString += "g1;1901;3;3;4;3;3;3;3n";
    outString += ";1902;3;3;4;3;3;3;3n";
    fp.open(filePath, ios::app | ios::in | ios::out);
    fp << outString;
    fp.close();
    return 0;
}

然后我有了读物,它的读数很好,但是它没有写:

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;TURn";
    }
    outString += "g";
    outString += to_string(numberOfGames + 1);
    outString += ";1901;3;3;4;3;3;3;3n";
    outString += ";1902;3;3;4;3;3;3;3n";
    fp << outString;
    fp.close();

    return 0;
}

如果文件不存在,则创建该文件,否则将读取。阅读部分是基于对此问题的公认答案:在C 中的CSV文件中读取特定行。

非常感谢!

到达文件末尾后,您将获得fp.eof()== true。如果您检查fp.tellg()返回的值(读/获取位置)和fp.tellp()(写入/put位置),您可以看到它们当时是无效的。

到达EOF后,在开始阅读之前,您需要重置流状态:

fp.clear();