c++ - 如何在 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 开头的所有行
解决方案
您已经一次将一根线拉成一根绳子。只需检查该字符串是否以您的注释字符开头,如果是,则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);
// ...
推荐阅读
- php - 获取 AJAX 请求的初始帖子类型
- python - 当您不知道它是什么时,在数组中查找第一次值
- hive - 如何使用serde通过hive解析xml数据?
- ruby - Sketchup Ruby,为面添加纹理
- autoconf - 将变量添加到 libtool 脚本
- postgresql - 根据运输分类产品
- python - 在数组中追加多个值
- react-native - MaterialTopTabNavigator 动态路由配置
- javascript - Javascript:在图形遗传算法中找不到错误
- python-3.x - 为什么 Airtable API 和 Python 不起作用?