Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.80
Опа!!
15 / 15 / 0
Регистрация: 30.09.2009
Сообщений: 89
#1

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

22.05.2011, 01:38. Просмотров 1369. Ответов 6
Метки нет (Все метки)

Доброго времени суток. Необходимо осуществить считывание данных из файла, на основе считанных данных заполнять поля объекта класса.

Сам класс содержит следующие поля:
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()) последовательно заполняет поля класса, когда текущая считанная строка пуста (но не конец файла), то экземпляр заполнен, необходимо поместить его в контейнер и приступить к продолжениию считывания начиная со следующей за пустой строки. Метод для помещения объекта в контейнер написан, вопрос только в удобной и логичной реализации считывания данных из файла - как удобней хранить в файле, при каком условии помещать экземпляр в контейнер и начинать заполнение нового... надеюсь на вашу поддержку, уважаемые форумчане
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.05.2011, 01:38
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Считывание из файла и заполнение контейнера объектами (C++):

Чтение из файла и заполнение контейнера map - C++
Есть такое задание: дан файл,в котором записаны имена студентов.Напротив каждого имени - их оценки.Нужно считать из файла это всё в...

Заполнение контейнера map из файла без цикла - C++
В общем, вопрос следущий. Интересует, возможно ли инициализировать контейнер map, данными из файла, без использования циклов. Например,...

Заполнение map объектами класса - C++
Здравствуйте! Нашел пример заполнения map таким образом: map<string, int> M; M = 1; Но при заполнении map аналогичным образом...

Создание, заполнение объектами и удаление динамического массива. Выдает run time error - C++
Компилятор ни на что не ругается, но консоль вылетает с виндовской ошибкой #ifndef Point_HPP // anti multiply including gates ...

Заменить считывание с клавиатуры на считывание из файла - C++
Помогите пожалуйста, ни разу не работал со считыванием из файла поэтому не понимаю как и что делать. Почитал в интернете, попробовал, не...

Считать из файла 2 строки с числами в 2 контейнера set - C++
Здравствуйте! Помогите, как считать из файла последовательно 2 строки с числами? Например файл такой: 56 78 4 2 2 33 1 45 Нужно...

6
OstapBender
584 / 523 / 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)); //нужен соотв. конструктор
}
1
Опа!!
15 / 15 / 0
Регистрация: 30.09.2009
Сообщений: 89
22.05.2011, 01:55  [ТС] #3
Цитата Сообщение от OstapBender Посмотреть сообщение
fIn >> N >> C >> T >> Sc;
Хм, здесь каждая строка будет помещаться в соответствущую переменную?
0
OstapBender
584 / 523 / 35
Регистрация: 22.03.2011
Сообщений: 1,585
22.05.2011, 01:58 #4
Цитата Сообщение от Опа!! Посмотреть сообщение
Хм, здесь каждая строка будет помещаться в соответствущую переменную?
не важно строка или нет, оператор >> читает что-либо до естественного разделителя (коими являются пробелы, табуляции, переносы...) и помещает все куда надо
1
Опа!!
15 / 15 / 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 << ".";
        }
0
OstapBender
584 / 523 / 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;
}
посмотри внимательно свой конструктор
1
Опа!!
15 / 15 / 0
Регистрация: 30.09.2009
Сообщений: 89
22.05.2011, 03:40  [ТС] #7
Тьфу ты, мой фейл, спасибо еще раз, теперь все в порядке
0
22.05.2011, 03:40
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.05.2011, 03:40
Привет! Вот еще темы с ответами:

Считывание файла в массив и запись нового файла - C++
Консоль VS C++. Текстовый файл открывается как бинарный, и считывается по 100 байт в массив - и сразу они переписываются в другой файл. В...

Считывание из файла - C++
//test.cpp #include &lt;iostream&gt; #include &lt;fstream&gt; using namespace std; void main() { ifstream input(&quot;input.txt&quot;); ...

Считывание из файла - C++
Ребят,подскажите пожалуйста: Нужно считать из файлов значения. Я создал два класса,в которых есть переменные,в которые будут считываться...

считывание с файла - C++
файл содержит data.txt: 200 185 170 160 76 54.9 39 27 7.5 10.7 12.9 15.9 6.5 7.9 12 12 ...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.