Чтение текстового файла с использованием VC ++ - PullRequest
0 голосов
/ 04 января 2011

Мне нужно прочитать текстовый файл, например, как нижний:

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 значений, как указано выше. Есть одна такая строка для каждой точки сетки в каждом файле. Индексы Х имеют значение наиболее быстро, затем Y, затем Z; первая строка в файле относится к элементу (0,0,0); это означает, что первые 10 значений представляют первую строку, которая относится к элементу (0,0,0), а вторую строку (вторые 10 значений) - ко второму элементу (1,0,0); последний элемент (599 247 247).

Я не знаю, как я могу написать код для этого файла, используя Visual C ++, я знаю, что мне нужно читать этот файл построчно, что можно определить, удалив 10 значений и токенизировать его, а затем я должен создайте xyz для каждой строки или конца строки. Я знаю концепцию, но не знаю, как я могу написать ее на Visual C ++ ... Мне нужно отправить ее в качестве домашней работы ... Я действительно приветствую любую помощь ... Спасибо

Ответы [ 2 ]

0 голосов
/ 04 января 2011

У меня нет здесь 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;
}
0 голосов
/ 04 января 2011

основная часть может выглядеть так:

std::ifstream is("test.txt");
std::vector<double> numbers;
for(;;) {
    double number;
    is >> number;
    if (!is)
        break;
    numbers.push_back(number);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...