我需要阅读一个文本文件,例如底部:
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 ++中编写代码..我需要将它作为我的作业提交..我真的很欢迎每一个帮助..谢谢
答案 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;
}