Вопрос по c++, getline, ifstream, vector – Как я могу прочитать данные из текстового файла и вернуться к вектору?

0

У меня есть текстовый файл "test.txt» где хранятся мои данные следующим образом:s интервал между каждым полем разделителя ..

Код: Имя: Кой

045: Ted: Coy1
054: Red: Coy2

Как мне прочитать эти данные из файла и вставить их в вектор?

vector  data;
Machine machine

void testclass(){
ifstream inFile("test.txt");
if (!inFile){
    cout < "File couldn't be opened." < endl;
    return;
}
while(!inFile.eof()){
    string code,name,coy;
    getline(inFile,code, ':');
    getline(inFile,name, ':');
    getline(inFile,coy, ':');
data.push_back(machine)

}
while(!inFile.eof()) здесь не так, Какая книга проинструктировала вас сделать это? Lightness Races in Orbit

Ваш Ответ

2   ответа
1

Как уже отмечали другие, одна проблема заключается в том, что выперечитываем данные в локальные переменные (,codename а такжеcoy), но никогда не помещать эти ценности вmachine прежде чем добавить его в вектор.

Этоне только проблема, хотя. Вашwhile (!infile.eof()) тоже неправильно (на самом деле,while (!whatever.eof()) по существувсегда неправильно). Обычно вы хотите продолжить чтение, пока чтение прошло успешно.whatever.eof() вернет true только после того, как вы попытаетесь прочитать и вымы достигли конца файладо чтение началось.

Как яОбычно я исправляю это, чтобы определить потоковый экстрактор для вашего класса Machine:

class Machine { 
// ...

    friend std::istream &operator>>(std::istream &is, Machine &m) { 
        std::getline(is, m.code, ':');
        std::getline(is, m.name, ':');
        std::getline(is, m.coy, ":");
        return is;
    }
};

Используя это, вы можете читать что-то вроде этого:

std::vector machines;

Machine machine;

while (infile >> machine) 
    machines.push_back(machine);

Однажды ты'мы определили потоковый экстрактор для типа,s еще одна возможность рассмотреть, хотя; Вы можете инициализировать вектор из пары итераторов:

std::vector machines((std::istream_iterator(infile)),
                               std::istream_iterator());

... и будет читать все данные из файла (используяoperator>> мы определили выше) и использовать его для инициализацииmachines вектор.

0

Вы должны прочитать данные и поместить их в переменные-члены объекта класса Machine. и затем поместите этот объект в Вектор.

Похожие вопросы