【发布时间】:2012-10-29 12:49:11
【问题描述】:
所以我在这个网站上看到了很多关于从 C++ 中读取文本文件的解决方案和教程,但还没有找到解决我的问题的方法。我是 C++ 的新手,所以我认为我无法拼凑一些文档来理解这一切。
我要做的是读取文本文件编号,同时忽略文件中由“#”表示的 cmets。因此示例文件如下所示:
#here is my comment
20 30 40 50
#this is my last comment
60 70 80 90
当没有任何 cmets 时,我的代码可以很好地读取数字,但我无法很好地解析流以忽略 cmets。它现在是一种黑客解决方案。
/////////////////////// Read the file ///////////////////////
std::string line;
if (input_file.is_open())
{
//While we can still read the file
while (std::getline(input_file, line))
{
std::istringstream iss(line);
float num; // The number in the line
//while the iss is a number
while ((iss >> num))
{
//look at the number
}
}
}
else
{
std::cout << "Unable to open file";
}
/////////////////////// done reading file /////////////////
有没有一种方法可以将评论处理与此解决方案结合起来,或者我是否需要一种不同的方法?任何建议都会很棒,谢谢。
【问题讨论】:
-
line.assign(line.substr(0,line.find('#')));(作为 while 循环中的第一条语句)将是快速进行必要更改的一种方式。 -
这非常非常简单。你说你对上面的代码理解不够好,无法修改它。我认为你需要花一些时间来获得这种理解,然后再尝试其他任何事情。
-
您是否尝试过文件中存在的 cmets?如所写,代码将忽略第一部分之后的任何非有效数字部分,包括 cmets。
-
好的,所以我认为@BartvanIngenSchenau 是对的,这是我一开始的直觉,但我得到了一些奇怪的行为,现在我认为这些行为与解析无关。我在这里没有展示的是我正在使用文件输入来绘制一堆几何图形,有时我会在屏幕上绘制一条红线。所以我的想法是,可能是因为它正在做一些奇怪的事情并阅读 cmets,但现在我认为它是另外一回事。所以我将探索其他一些元素,谢谢大家。
标签: c++ parsing inputstream