首页 > 解决方案 > 如何在 C++ 中使用 ifstream 绕过外部文本文件中的注释行

问题描述

我无法过滤文本文件中的“注释”行。我想过滤文本文件中以 # 或 // 开头的行。

谢谢!

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|Mary Doe 1002|John Down 1003|John Doe 1004|Marilyn Hendrix 开头的所有行

标签: c++file-handlingifstream

解决方案


您已经一次将一根线拉成一根绳子。只需检查该字符串是否以您的注释字符开头,如果是,则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);
    // ...

推荐阅读