【问题标题】:Stream and c++ - parsing fileStream 和 c++ - 解析文件
【发布时间】:2009-11-02 09:43:22
【问题描述】:

我以前做过……但我忘记了。 我有一个包含一些数据的文件:

0.5 0.6 0.7 1.2 1.5

如何在 C++ 中阅读此内容?我用流做的......类似:

float var = 0;
stream >> var;

【问题讨论】:

  • 除了下面的答案之外,这里有一个非常好的 C++ 参考资料,您将在第 6 节中找到有关流的更多信息:icce.rug.nl/documents/cplusplus

标签: c++ parsing stream


【解决方案1】:

下面的 sn-p 应该会给你一个线索。不要忘记包含<fstream>

std::ifstream fin("filename.txt");
float value;
while (fin >> value)
{
    // Do whatever you want with the value
}

不要尝试测试fin.eof(),它不会告诉你是否要碰到文件末尾。

【讨论】:

    【解决方案2】:

    这样的?

    std::ifstream stream("C:/a.txt");
        float var = 0;
        while(stream >> var)
        {
            //Do some processing
        }
    

    【讨论】:

    • eof() 仅在提取失败后返回 true。
    • 我已编辑答案以确保其安全。 @Ockonal:请检查编辑后的答案。
    【解决方案3】:

    你的意思是如何打开一个文件并从中读取数据?

    应该是这样的:

    float var;
    ifstream infile("filename");
    if(infile.good()){
        while(!infile.eof()){
            infile >> var;
            cout << var << "is the next value\n";
        }
    }
    

    【讨论】:

    • 这就是我一直做文件 I/O 的方式;以及我一直在各种参考资料中看到它的方式。
    • warren,您的代码不正确,请参阅我在 Vijay 的回答中的评论(不过我没有投反对票)。
    • eof 直到第一次尝试读取文件失败后才返回 true。所以(除非文件在最后一个数字之后立即结束,没有换行符)你的循环将执行额外的迭代。
    • 实际上,avakar 的“在最后一次提取时撞到文件末尾”比我的“第一次尝试读取失败”更好的解释。如果文件在最后一个数字之后立即结束,则 eof 将在最后一个“>>”操作成功后变为真。是的,在较低级别上,涉及失败的字节读取,但在这种情况下“>>”操作是成功的,因此“撞到”在教学上要好得多。
    • @avakar - 没有看到 Vijay 的回答。 @Thomas - 这就是 .good() 调用应该做的,我想 - 在继续之前确保文件是健康的?我不介意犯错,但我有点担心这是我见过的每一个参考手册和老师都是这样做的,而且我已经这样做了大约 15 年,这是不对的:-\
    【解决方案4】:

    要从文件中读取,请使用 std::ifstream。

    【讨论】:

      【解决方案5】:

      类似的东西。

      float array[5] = {0.0f};
      
      for(int i = 0; i < 5; i++)
      {
          stream >> array[i];
      }
      

      顺便说一句,我做了 5 个,因为您的示例中有 5 个。 (我假设你有流设置)

      【讨论】:

      • @Ólafur - 这将如何运作?也许我的 C++ 语法内存已经过时了,但是当我阅读它时,您将从文件中读取到 var地址,而不是到数组中的下一个位置。你应该想把[i]放回var的末尾,就像我之前为你修改过的那样——除非这是一种使用我以前从未见过或听说过的数组的方式。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-07
      • 2012-10-06
      • 1970-01-01
      • 1970-01-01
      • 2012-01-01
      • 2018-09-10
      相关资源
      最近更新 更多