使用VC ++读取文本文件

时间:2011-01-03 21:20:38

标签: visual-studio-2010 visual-c++

我需要阅读一个文本文件,例如底部:

8.563E + 002 2.051E + 004 4.180E-004 7.596E-001 5.260E-005 6.898E-002 1.710E-001 8.053E-011 2.686E-013 8.650E-012

这10个科学数字中的每一个都是一行的具体值,这意味着每行包含10个如上所述的值,每个文件中的每个网格点都有一条这样的行。 X指数的值最快,然后是Y,然后是Z;文件中的第一行是指元素(0,0,0);它表示前10个值表示第一行,它引用元素(0,0,0),第二行(第二个10值)表示第二个元素(1,0,0);元素的最后一个(599,247,247)。

我不知道如何使用visual C ++编写此文件的代码,我知道的是我必须逐行读取此文件,这可以通过消除10个值并将其标记化来确定,然后我必须为行的每一行创建xyz。我知道这个概念,但我不知道如何在Visual C ++中编写代码..我需要将它作为我的作业提交..我真的很欢迎每一个帮助..谢谢

2 个答案:

答案 0 :(得分:0)

核心部分可能如下所示:

std::ifstream is("test.txt");
std::vector<double> numbers;
for(;;) {
    double number;
    is >> number;
    if (!is)
        break;
    numbers.push_back(number);
}

答案 1 :(得分:0)

我这里没有MSVC但是GCC 4.3。我希望这段代码有所帮助:

#include <iostream>
#include <fstream>
#include <list>
#include <string>
#include <iterator>

using namespace std;

class customdata
{
friend istream& operator>>(istream& in, customdata& o);
friend ostream& operator<<(ostream& out, const customdata& i);

public:
    customdata()
        : x(0), y(0), z(0)
    {}

    customdata(const customdata& o)
        : x(o.x), y(o.y), z(o.z)
    {}

    customdata& operator=(const customdata& o)
    {
        if (this != &o)
        {
            x = o.x;
            y = o.y;
            z = o.z;
        }
        return *this;
    }

private:
    long double x, y, z;
};

istream& operator>>(istream& in, customdata& o)
{
    in >> o.x >> o.y >> o.z;
    return in;
}

ostream& operator<<(ostream& out, const customdata& i)
{
    out << "x=" << i.x << " y=" << i.y << " z=" << i.z;
    return out;
}

// Usage: yourexec <infile>
int main(int argc, char** argv)
{
    int exitcode=0;
    if(argc > 1)
    {
        ifstream from(argv[1]);
        if (!from)
        {
            cerr << "cannot open input file " << argv[1] << endl;
            exitcode=1;
        }
        else
        {
            list<customdata> mydata;
            copy(istream_iterator<customdata>(from), istream_iterator<customdata>(), back_inserter(mydata));
            if(mydata.empty())
            {
                cerr << "corrupt input data" << endl;
                exitcode=3;
            }
            else
                copy(mydata.begin(), mydata.end(), ostream_iterator<customdata>(cout, "\n"));
        }
    }
    else
    {
        cerr << "insufficient calling parameters" << endl;
        exitcode=2;
    }
    return exitcode;
}
相关问题