如何在 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);
// ...
我在过滤文本文件中的 '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);
// ...