首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >读取BSDF数据格式

读取BSDF数据格式
EN

Stack Overflow用户
提问于 2011-11-14 13:33:17
回答 2查看 244关注 0票数 0

我被要求编写一个读取泽马克斯定义的BSDF数据格式的函数,这样的文件示例可以在下面的页面中找到:BSDF文件示例

如果可能的话,我只想使用标准的ifstream函数。

我已经在一个专门的类中准备了所有必要的数据采集器。

我现在正在尝试编写从文件中读取数据的函数。

问题:

  • 如何排除注释行?如文档所示,它们以散列# (散列)开头,我要做的事情如下 void ReadBSDFFile(myclass &object) { ifstream infile;infile.open(object.BRDFfilename);char c;infile.get (c );while (c == "#") //问题,显然我不能用这种方式进行比较。我应该如何做呢?{ getline(infile,line);infile.get(c);} //此时我想返回一个字符(因为我不想丢失以*c*) infile.seekg(-1,ios_base::cur)结束的非散列字符;//执行所有rest infile.close()};
  • 以类似的方式,我想验证我是否在正确的行后面(例如"AngleOfIncidence“行)。我能这样做吗? 字符串AngleInc;infile >> AngleInc;if (AngleInc != "AngleOfIncidence") { //error }

感谢任何愿意评论/帮助的人。欢迎建设性的批评。

费德里科

编辑:

感谢下面的Joachim Pileborg,我成功地处理了文件的数据块部分。

现在我有了以下问题。当到达数据库锁时,我编写了以下代码,但在第二次迭代(i = 1)中,我收到了TIS行的错误消息。有人能帮我理解一下为什么这不管用吗?谢谢

注意:blocks是AngleOfIncidence行上的数字,rows是ScatterAzimuth行上的数字,columns是ScatterRadial上的数字。我测试并验证了该功能的这一部分按需要工作。

代码语言:javascript
复制
// now reading the data blocks.

for (int i=0; i<blocks; i++)
{
    // TIS line
    getline(infile, line);
    if (line.find("TIS") == string::npos)
    {
        // if not, error message
    }

    // Data block
    for (int j=0; j<rows; j++)
    {
        for (int k=0; k<columns; k++)
        {
            infile >> object.BRDFData[i][j][k];
        }
    }
}

编辑2:

解决了添加infile.seekg(+2, ios_base::cur);作为i循环的最后一行的问题。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-11-14 13:42:56

读取循环可以简化如下:

代码语言:javascript
复制
std::string line;
while (getline(infile, line))
{
    if (line[0] != '#')
    {
        // Not a comment, do something with the line
        if (line.find("AngleOfIncidence") != std::string::npos)
        {
            // On the AngleOfIncidence line, do special things here
        }
    }
}

这可能不是最理想的,只是写在我的头顶上,但应该有效。

票数 1
EN

Stack Overflow用户

发布于 2011-11-14 13:43:57

根据您提供的格式说明:

任何以#符号开头的行都会被忽略为注释行。

所以你需要做的是

代码语言:javascript
复制
Read the file line by line
If the line starts with # ignore it
Otherwise process the line. 

您使用的while是错误的。改用getLine函数,并将其第一个字符与#进行比较。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8122333

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档