如何在 C++ 中使用 ifstream 绕过外部文本文件中的注释行

How to bypass commented lines in external text file using ifstream in C++

我在过滤文本文件中的 'commented' 行时遇到问题。 我想过滤文本文件中以#或//开头的行。

谢谢!

string code, name, year, semester, value, data;

char delimiter = '|';

ifstream ifsUnits;
ifsUnits.open("./data/units.txt");

if (ifsUnits.fail())
    cout << "\nError reading from file <units.txt>.";
else
{
    while (!ifsUnits.eof())
    {
        getline(ifsUnits, data);
        stringstream ssData(data);
        while (ssData.good())
        {
            getline(ssData, code, delimiter);
            getline(ssData, name, delimiter);
            getline(ssData, year, delimiter);
            getline(ssData, semester, delimiter);
            getline(ssData, value, delimiter);

            lUnits.push_back(Unit(stoi(code), name, stoi(year), stoi(semester), stoi(value)));
        }
    }
}
ifsUnits.close();

文本文件内容:

//idNumber|name <-- 我想绕过所有以 // 开头的行 1001|玛丽·多伊 1002|约翰唐 1003|李四 1004|玛丽莲·亨德里克斯

您已经一次将一行拉成一个字符串。只需检查该字符串是否以您的注释字符开头,如果是,continue:

while (getline(ifsUnits, data)) // more robust than eof check
{
    if ((data.size() > 1 && data[0] == '/' && data[1] == '/')
        || (data.size() > 0 && data[0] == '#')) { continue; }
    
    stringstream ssData(data);
    // ...