Форум программистов, компьютерный форум CyberForum.ru

Считывание из файла и заполнение контейнера объектами - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.80
Опа!!
14 / 14 / 0
Регистрация: 30.09.2009
Сообщений: 89
22.05.2011, 01:38     Считывание из файла и заполнение контейнера объектами #1
Доброго времени суток. Необходимо осуществить считывание данных из файла, на основе считанных данных заполнять поля объекта класса.

Сам класс содержит следующие поля:
C++
1
2
3
4
5
6
7
8
9
10
class CUniversity
{
    private:
        string Name;
        string City;
        char Type;
        string Student_count;
       public:
                ....
};
Необходимо заполнить эти поля и поместить несколько объектов класса в контейнер vector. Сам файл, как не показалось, удобней всего организовать примерно таким образом:

Name1
City1
k
100

Name2
City2
c
200

Name3
...
Т.о., каждая строка (наверное, удобней всего пользоваться классом ifstream и методом getline()) последовательно заполняет поля класса, когда текущая считанная строка пуста (но не конец файла), то экземпляр заполнен, необходимо поместить его в контейнер и приступить к продолжениию считывания начиная со следующей за пустой строки. Метод для помещения объекта в контейнер написан, вопрос только в удобной и логичной реализации считывания данных из файла - как удобней хранить в файле, при каком условии помещать экземпляр в контейнер и начинать заполнение нового... надеюсь на вашу поддержку, уважаемые форумчане
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.05.2011, 01:38     Считывание из файла и заполнение контейнера объектами
Посмотрите здесь:

Считывание файла C++
C++ Считывание из файла в С++
Считывание с файла C++
C++ Считывание с файла !
C++ Создание, заполнение объектами и удаление динамического массива. Выдает run time error
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
OstapBender
 Аватар для OstapBender
581 / 519 / 35
Регистрация: 22.03.2011
Сообщений: 1,585
22.05.2011, 01:48     Считывание из файла и заполнение контейнера объектами #2
почему Student_count не int?

по теме:
все банально!
C++
1
2
3
4
5
6
7
8
string N;
string C;
char T;
string Sc; //временные
while (!fIn.eof()) {
fIn >> N >> C >> T >> Sc;
vec.push_back(CUniversity(N,C,T,Sc)); //нужен соотв. конструктор
}
Опа!!
14 / 14 / 0
Регистрация: 30.09.2009
Сообщений: 89
22.05.2011, 01:55  [ТС]     Считывание из файла и заполнение контейнера объектами #3
Цитата Сообщение от OstapBender Посмотреть сообщение
fIn >> N >> C >> T >> Sc;
Хм, здесь каждая строка будет помещаться в соответствущую переменную?
OstapBender
 Аватар для OstapBender
581 / 519 / 35
Регистрация: 22.03.2011
Сообщений: 1,585
22.05.2011, 01:58     Считывание из файла и заполнение контейнера объектами #4
Цитата Сообщение от Опа!! Посмотреть сообщение
Хм, здесь каждая строка будет помещаться в соответствущую переменную?
не важно строка или нет, оператор >> читает что-либо до естественного разделителя (коими являются пробелы, табуляции, переносы...) и помещает все куда надо
Опа!!
14 / 14 / 0
Регистрация: 30.09.2009
Сообщений: 89
22.05.2011, 03:05  [ТС]     Считывание из файла и заполнение контейнера объектами #5
Спасибо большое, сейчас будем пробовать

Добавлено через 1 час 5 минут
Такс, все работает, все отлично, за исключением одного момента - поля Student_count: поставил ему значение int, но видимо где-то происходит какое-то преобразование и значение числовое теряется, при выводе содержимого вектора поле Student_count при использовании типа string Осатеся пустым, при использовании типа unsigned - большое положительное число, независимо от того, что в файле, всегда одно и то же, в случае int - большое отрицательное число. Где-то может конвертировать надо явным образом?

т.е. сейчас имею следующий код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
// поля класса
class CUniversity
{
    private:
        string Name;
        string City;
        char Type;
        int Student_count;
 
...
}
 
// конструктор
CUniversity (string N, string C, char T, int S)
        {
            Name = N;
            City = C;
            T = Type;
            S = Student_count;
        }
 
// метод считывания из файла
        void ReadFromFile()
        {
            string bufName;
            string bufCity;
            char bufType;
            int bufStudent_count;
 
            if (f_In.is_open())
            {
                while (!f_In.eof())
                {
                    f_In >> bufName >> bufCity >> bufType >> bufStudent_count;
                    bs.push_back(CUniversity(bufName, bufCity, bufType, bufStudent_count)); 
                    //f_In.getline(buf, 100);
                    //f_Out << buf;
                    //f_Out << endl;
                }
                cout << "All ok";
                getch();
            }
            else 
            {
                cout << "Input file isn't opened!";
                getch();
            }
        }
 
// вывод 1
        void ShowVector()
        {
            int n = bs.size();
            for (int j = 0; j < n; j++)
            {
                cout << endl;
                bs[j].ShowInfo();
                cout << endl;
            }
        }
 
// вывод2
void ShowInfo() 
        {
            cout << "University name: " << Name << endl;
            f_Out << "University name: " << Name << endl;
            cout << "Destination city: " << City << endl;
            f_Out << "Destination city: " << City << endl;
            if (Type == 'c') 
            {
                cout << "Type: Commercial." << endl;
                f_Out << "Type: Commercial." << endl;
            }
            else 
            {
                cout << "Type: State." << endl;
                f_Out << "Type: State." << endl;
            }
            cout << "Number of students: " << Student_count << ".";
            f_Out << "Number of students: " << Student_count << ".";
        }
OstapBender
 Аватар для OstapBender
581 / 519 / 35
Регистрация: 22.03.2011
Сообщений: 1,585
22.05.2011, 03:18     Считывание из файла и заполнение контейнера объектами #6
Цитата Сообщение от Опа!! Посмотреть сообщение
CUniversity (string N, string C, char T, int S) {
Name = N;
City = C;
T = Type;
S = Student_count;
}
посмотри внимательно свой конструктор
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.05.2011, 03:40     Считывание из файла и заполнение контейнера объектами
Еще ссылки по теме:

Заполнение map объектами класса C++
C++ Считывание из файла
Заполнение контейнера map из файла без цикла C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Опа!!
14 / 14 / 0
Регистрация: 30.09.2009
Сообщений: 89
22.05.2011, 03:40  [ТС]     Считывание из файла и заполнение контейнера объектами #7
Тьфу ты, мой фейл, спасибо еще раз, теперь все в порядке
Yandex
Объявления
22.05.2011, 03:40     Считывание из файла и заполнение контейнера объектами
Ответ Создать тему
Опции темы

Текущее время: 09:06. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru