2012-05-24 4 views
0

У меня есть следующий код, и я хочу построить объект. Как я могу это сделать? Есть идеи? Класс имеет тип {sting, int, int}.Объект класса сборки из строки txt файла

код:

void StudentRepository::loadStudents(){ 
    ifstream fl; 
    fl.open("studs.txt"); 
    Student A(); 
    if(fl.is_open()){ 
     while(!(fl.eof())){ 
      getline(???); //i dont knwo houw coudl i limit what i want were... 

     } 
    } 
    else{ 
     cout<<"~~~ File couldn't be open! ~~~"<<endl; 
    } 
} 

Сохранить в файл funcntion:

void StudentRepository::saveStudents(){ 
    ofstream fl; 
    fl.open("studs.txt"); 
    if(fl.is_open()){ 
     for(unsigned i=0; i<students.size(); i++){ 
      fl<<students[i].getName(); 
      fl<<","; 
      fl<<students[i].getID(); 
      fl<<","; 
      fl<<students[i].getGroup(); 
      fl<<","<<endl; 
     } 
    } 
    else{ 
    cout<<"~~~ File couldn't be open! ~~~"<<endl; 
} 

Я попытался реализовать некоторые ограничения, но это не работает ... Как Кани это сделать?

Сначала я просто написал объект в файл, но это труднее, чтобы получить их обратно к объекту .... содержание файла:

maier ewew 123 232 
tudor efsw 13 2323 
+1

Вы бы так любезны показать нам, что содержит 'studs.txt'? –

+0

Файл является перезаписываемым файлом. я действительно сохраняю свою работу. –

+0

Что вы подразумеваете под _limit_? ['std :: getline()'] (http://en.cppreference.com/w/cpp/string/basic_string/getline) будет считывать символ новой строки (и отбрасывать его). Не используйте 'while (! Fl.eof()) {}', немедленно проверяйте 'if (getline (...))' успешно. – hmjd

ответ

2

Would перегрузки входных и выходных операторов для типа Student работы для тебя?

#include <iostream> 
#include <string> 
#include <fstream> 

using namespace std; 

class Student { 
public: 
    Student() : name(""),id(0),group(0) {} 
    Student(const string &_name, const int &_id, const int &_group) : name(_name), id(_id), group(_group) {} 

    friend ostream &operator<<(ostream &out, const Student &stud); 
    friend istream &operator>>(istream &in, Student &stud); 
private: 
    string name; 
    int id; 
    int group; 
};  

ostream &operator<<(ostream &out, const Student &stud) { 
    out << stud.name << " " << stud.id << " " << stud.group << endl; 
    return out; 
} 

istream &operator>>(istream &in, Student &stud) { 
    string name, surname; 
    in >> name >> surname >> stud.id >> stud.group; 
    stud.name = name + " " + surname; 
    return in; 
}  

int main(int argc, char **argv) { 

    Student john("john doe", 214, 43); 
    Student sally("sally parker", 215, 42); 
    Student jack("jack ripper", 114, 41); 

    ofstream out("studentfile.txt"); 
    out << john; 
    out << sally; 
    out << jack; 
    out.close(); 

    Student newstud; 
    ifstream in("studentfile.txt"); 
    in >> newstud; 
    cout << "Read " << newstud; 
    in >> newstud; 
    cout << "Read " << newstud; 
    in >> newstud; 
    cout << "Read " << newstud; 
    in.close(); 

    return 0; 
}  

Добавление некоторых стандартных проверок ввода-вывода для проверки того, что все, что вы читаете, действительно должно это сделать.

Смежные вопросы