Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/4: Рейтинг темы: голосов - 4, средняя оценка - 5.00
whh
0 / 0 / 0
Регистрация: 28.11.2012
Сообщений: 6
1

Считать объекты из файла разных типов

28.11.2012, 17:50. Просмотров 737. Ответов 10
Метки нет (Все метки)

Добрый день, имеется текстовый файл такого вида:
fgfd
32
cxv
54
43
hmgg
65
54
23

Мне нужно считать каждый объект из файла и записать в двунаправленный список.
Сам список состоит из наследованых объектов. Базовый класс имеет два поля, остальные 4,5,6 соответственно. Мне надо как-то различать количество полей во время чтения из файла. Записать их в переменные не проблема, а вот считать правильно проблемно. Пробовал считывать с условием, пока след строка не число, но это не помогло
Помогите пожалуйста это реализовать
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.11.2012, 17:50
Ответы с готовыми решениями:

Объекты разных типов в одном контейнере и c++ 11 auto
Собственно дабы упростить себе жизнь, решил использовать auto но столкнулся с...

Объекты и приведение типов
Добрый день. Я написал класс, на подобии std::string, только для типа wchar_t....

объекты двух типов SymbString и DecString
Написать программу, демонстрирующую работу с объектами двух типов:...

Зачем нужно возвращать ссылку на объекты потоковых типов?
В книжке Герберта Шилдта четко и ясно указано, что для того, чтобы перегружать...

Распределение памяти под объекты числовых типов. Не могу понять
Может быть немного не в тему пишу, т.к. этот вопрос не относится конкретно к...

10
I.M.
567 / 550 / 47
Регистрация: 16.12.2011
Сообщений: 1,389
28.11.2012, 18:01 2
whh, оставляйте в файле пометку, к какому типу данных относится следующий набор значений
0
whh
0 / 0 / 0
Регистрация: 28.11.2012
Сообщений: 6
28.11.2012, 18:14  [ТС] 3
А без пометки никак? Нельзя сделать так что бы программа сама определяла этот тип данных?
0
I.M.
567 / 550 / 47
Регистрация: 16.12.2011
Сообщений: 1,389
28.11.2012, 18:20 4
Разве что считать количество чисел между двумя строками и на ходу решать, что за объект создавать.
Но проблему начнутся, как только появится несколько наследников с одинаковым количеством полей
0
whh
0 / 0 / 0
Регистрация: 28.11.2012
Сообщений: 6
28.11.2012, 18:24  [ТС] 5
Можете привести пример как считать?
У меня была такая идея, но реализовать у меня ее не вышло..
0
alsav22
5442 / 4837 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
28.11.2012, 18:28 6
Первое поле строка?
0
I.M.
567 / 550 / 47
Регистрация: 16.12.2011
Сообщений: 1,389
28.11.2012, 18:28 7
Считывать очередное значение в строку и проверять, является оно числом или нет
0
whh
0 / 0 / 0
Регистрация: 28.11.2012
Сообщений: 6
28.11.2012, 18:39  [ТС] 8
Цитата Сообщение от alsav22 Посмотреть сообщение
Первое поле строка?
Да, первое поле строка

Добавлено через 6 минут
Цитата Сообщение от I.M. Посмотреть сообщение
Считывать очередное значение в строку и проверять, является оно числом или нет
Пробовал так делать через функцию isdigit() со счетчиком: если число, то ++.
Как после этого тогда считывать?
По новой открывать файл и считывать до появления новой строки?
0
alsav22
5442 / 4837 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
28.11.2012, 19:00 9
Как пример. В отладке посмотрел - работает правильно. В файле:
fgfd
32
cxv
54
43
hmgg
65
54
23

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
#include <fstream>
#include <iostream>
#include <string>
using namespace std;
 
class A
{
 public:
  string str;
  int x;
};
 
class B
{
 public:
  string str;
  int x;
  int y;
};
 
class D
{
 public:
  string str;
  int x;
  int y;
  int z;
};
 
 
int main()
{
  
  ifstream f("1.txt");
  
  while (true)
  {
    string temp;
    f >> temp;
    
    if (f.eof()) break;
    
    streamoff i = f.tellg();
    
    int n;
    int c = 0;
    while (f >> n)
        c++;
    f.clear();
    f.seekg(i, ios::beg);
    
    if (c == 1)
    {
        A a;
        a.str = temp;
        f >> a.x;
    }
    if (c == 2)
    {
        B b;
        b.str = temp;
        f >> b.x;
        f >> b.y;
    }
    if (c == 3)
    {
        D d;
        d.str = temp;
        f >> d.x;
        f >> d.y;
        f >> d.z;
    }
  }
  
    
  system("pause");
  return(0);
}
1
whh
0 / 0 / 0
Регистрация: 28.11.2012
Сообщений: 6
28.11.2012, 19:18  [ТС] 10
alsav22, спасибо огромное, все работает
0
alsav22
5442 / 4837 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
28.11.2012, 19:39 11
Одно условие: для правильной работы этого кода, строка не должна начинаться с цифры.
1
28.11.2012, 19:39
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.11.2012, 19:39

Сложить объекты двух разных классов
Здравствуйте, при изучении программирования всплыл такой вопрос. Без объявления...

Сложение разных типов
У меня из файла в переменную int считывется число.. Мне нужно занести в...

Хранение разных типов
Приветствую всех. Возник вот такой вопрос. У меня есть, например, 3 разных...


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

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

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