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

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

Войти
Регистрация
Восстановить пароль
 
whh
0 / 0 / 0
Регистрация: 28.11.2012
Сообщений: 6
#1

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

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

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

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

Добавлено через 6 минут
Цитата Сообщение от I.M. Посмотреть сообщение
Считывать очередное значение в строку и проверять, является оно числом или нет
Пробовал так делать через функцию isdigit() со счетчиком: если число, то ++.
Как после этого тогда считывать?
По новой открывать файл и считывать до появления новой строки?
alsav22
5416 / 4812 / 442
Регистрация: 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);
}
whh
0 / 0 / 0
Регистрация: 28.11.2012
Сообщений: 6
28.11.2012, 19:18  [ТС]     Считать объекты из файла разных типов #10
alsav22, спасибо огромное, все работает
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.11.2012, 19:39     Считать объекты из файла разных типов
Еще ссылки по теме:
C++ Матрица из разных типов
C++ Указатели разных типов
Сложение разных типов C++
Как приравнять объекты двух разных классов C++
C++ Использование разных типов указателей

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

Или воспользуйтесь поиском по форуму:
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
28.11.2012, 19:39     Считать объекты из файла разных типов #11
Одно условие: для правильной работы этого кода, строка не должна начинаться с цифры.
Yandex
Объявления
28.11.2012, 19:39     Считать объекты из файла разных типов
Ответ Создать тему
Опции темы

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