Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.69/13: Рейтинг темы: голосов - 13, средняя оценка - 4.69
0 / 0 / 0
Регистрация: 28.11.2012
Сообщений: 6

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

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

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

Мне нужно считать каждый объект из файла и записать в двунаправленный список.
Сам список состоит из наследованых объектов. Базовый класс имеет два поля, остальные 4,5,6 соответственно. Мне надо как-то различать количество полей во время чтения из файла. Записать их в переменные не проблема, а вот считать правильно проблемно. Пробовал считывать с условием, пока след строка не число, но это не помогло
Помогите пожалуйста это реализовать
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
28.11.2012, 17:50
Ответы с готовыми решениями:

Массив указателей на объекты разных типов
Здравствуйте. К примеру, есть такая конструкция (приведена часть кода) // --- enum MyClasses /*для индексации по классам в...

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

ArrayList объекты разных типов
Здравствуйте.Подскажите пожалуйста. Такой вопрос куда запихнуть объекты разных типов (шаблон фабрика),в ArrayList?.Вот у меня 2 класса,...

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

Добавлено через 6 минут
Цитата Сообщение от I.M. Посмотреть сообщение
Считывать очередное значение в строку и проверять, является оно числом или нет
Пробовал так делать через функцию isdigit() со счетчиком: если число, то ++.
Как после этого тогда считывать?
По новой открывать файл и считывать до появления новой строки?
0
5499 / 4894 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
28.11.2012, 19:00
Как пример. В отладке посмотрел - работает правильно. В файле:
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
0 / 0 / 0
Регистрация: 28.11.2012
Сообщений: 6
28.11.2012, 19:18  [ТС]
alsav22, спасибо огромное, все работает
0
5499 / 4894 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
28.11.2012, 19:39
Одно условие: для правильной работы этого кода, строка не должна начинаться с цифры.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
28.11.2012, 19:39
Помогаю со студенческими работами здесь

Функция, которая принимает и возвращает объекты разных типов
Для пересылки данных между сервером и клиентом использую отдельные классы, которые практически повторяют модель данных базы. (сервер...

Создать массивы разных типов(3 типов), вывести их на экран
Создать массивы разных типов(3 типов), вывести их на экран.

Аналоги типов объекты COM
Добрый день. В общем есть необходимость подцепить COM-объект. Для удобства пользовался библиотекой QAxContainer. И собственно...

Объекты и приведение типов
Добрый день. Я написал класс, на подобии std::string, только для типа wchar_t. Вот сам класс: #pragma once #include &lt;iostream&gt; ...

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


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Ниже машинный перевод статьи The Thinkpad X220 Tablet is the best budget school laptop period . Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы,. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru