Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.78/18: Рейтинг темы: голосов - 18, средняя оценка - 4.78
6 / 6 / 3
Регистрация: 03.01.2012
Сообщений: 449

Получить типы полей структуры в массив

27.11.2013, 09:24. Показов 3805. Ответов 23
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
представьте такую структуру
C++
1
2
3
4
5
6
7
struct
{
int a;
char b[10];
float c;
... и ещё примерно таких же полей штук 300
} s;
выводить их так:
C++
1
Label1->Caption = s.a
утопия...
так вот я хочу получить массив типов... к примеру чтобы в String[0] было int, String[1] было char[10]
чтобы можно было вручную их доставать из памяти циклом...
или подскажите какой нибудь более лучший способ менее затратный
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
27.11.2013, 09:24
Ответы с готовыми решениями:

Получить список полей структуры и их значений
Есть структура с кучей полей. public class RealCellCoord { public int id; // cell number ...

Получить значение полей структуры, записанной в void
Доброго времени суток есть 2 структуры struct bd { char name, autor, izd, year; int razd, isset; enum EN1 { bougth = 1,...

Отсортировать массив из структур по одному из полей структуры любым способом
Отсортировать массив из структур по одному из полей структуры любым способом.

23
Почетный модератор
Эксперт С++
 Аватар для SatanaXIII
5851 / 2862 / 392
Регистрация: 01.11.2011
Сообщений: 6,906
27.11.2013, 09:46
Цитата Сообщение от lips Посмотреть сообщение
подскажите какой нибудь более лучший способ
А скажите, зачем вам все это нужно? Что вы потом хотите делать с этими данными?
И как вы хотите доставать это все в цикле?

Не по теме:

Цитата Сообщение от lips Посмотреть сообщение
утопия...
суицид.

0
6 / 6 / 3
Регистрация: 03.01.2012
Сообщений: 449
27.11.2013, 09:59  [ТС]
Цитата Сообщение от SatanaXIII Посмотреть сообщение
А скажите, зачем вам все это нужно?
дали такое задание
Цитата Сообщение от SatanaXIII Посмотреть сообщение
Что вы потом хотите делать с этими данными?
выводить, изменять, сохранять
Цитата Сообщение от SatanaXIII Посмотреть сообщение
И как вы хотите доставать это все в цикле?
указателем наверное... тут ещё надо подумать...

Добавлено через 1 минуту
но если будет этот самый массив типов... можно будет как то точечно из памяти доставать всё попорядочку
0
 Аватар для Kulgar
511 / 196 / 26
Регистрация: 07.08.2013
Сообщений: 814
27.11.2013, 10:24
Цитата Сообщение от lips Посмотреть сообщение
и ещё примерно таких же полей штук 300
Хотя бы раз Вам всё равно прийдётся их перебрать в тексте руками. Или же у Вас уже есть файл, который содержит описание структуры и задача сводится к "удобному" обращению к элементам экземпляра структуры?
0
6 / 6 / 3
Регистрация: 03.01.2012
Сообщений: 449
27.11.2013, 10:38  [ТС]
Цитата Сообщение от Kulgar Посмотреть сообщение
Хотя бы раз Вам всё равно прийдётся их перебрать в тексте руками. Или же у Вас уже есть файл, который содержит описание структуры и задача сводится к "удобному" обращению к элементам экземпляра структуры?
файл со структурами есть конечно... а какое ещё описание структуры?
0
Почетный модератор
Эксперт С++
 Аватар для SatanaXIII
5851 / 2862 / 392
Регистрация: 01.11.2011
Сообщений: 6,906
27.11.2013, 10:39
Цитата Сообщение от lips Посмотреть сообщение
выводить, изменять, сохранять
Выводить, измерять и сохранять типы полей структуры?
Цитата Сообщение от lips Посмотреть сообщение
можно будет как то точечно из памяти доставать всё попорядочку
Вы уверены, что в памяти поля структуры лежат по порядку? К примеру, что какой-либо массив, занимающий известное вам количество байт (тип, умноженный на количество), не содержит перед собой кусок памяти, хранящий размер этого массива.
Миниатюры
Получить типы полей структуры в массив  
0
 Аватар для Kulgar
511 / 196 / 26
Регистрация: 07.08.2013
Сообщений: 814
27.11.2013, 10:40
C++
1
2
3
4
5
6
7
struct
{
int a;
char b[10];
float c;
... и ещё примерно таких же полей штук 300
} s;
Это и есть описание (прототип) структуры.

Цитата Сообщение от lips Посмотреть сообщение
файл со структурами есть конечно
Что Вы понимаете под этим файлом?
0
6 / 6 / 3
Регистрация: 03.01.2012
Сообщений: 449
27.11.2013, 10:49  [ТС]
допустим если я напишу сначала код который разбирает этот файл со структурами и заполняет массив как мне надо...
тогда с помощью этого массива как достать данные из памяти?
надо как то получить адрес начала структуры и доставать из памяти данные опираясь на массив с типами структуры
но как получить этот адрес?

Добавлено через 4 минуты
Цитата Сообщение от Kulgar Посмотреть сообщение
C++
1
2
3
4
5
6
7
struct
{
int a;
char b[10];
float c;
... и ещё примерно таких же полей штук 300
} s;
Это и есть описание (прототип) структуры.


Что Вы понимаете под этим файлом?
да в этом файле содержатся такие же структуры
0
Почетный модератор
Эксперт С++
 Аватар для SatanaXIII
5851 / 2862 / 392
Регистрация: 01.11.2011
Сообщений: 6,906
27.11.2013, 10:50
Цитата Сообщение от lips Посмотреть сообщение
но как получить этот адрес?
C++
1
2
3
4
5
6
7
8
9
struct str_t
  {
  int i;
  char ch1[10];
  char ch2[20];
  } st;
 
 
cout << &st;
0
 Аватар для Kulgar
511 / 196 / 26
Регистрация: 07.08.2013
Сообщений: 814
27.11.2013, 10:51
lips, опишите ЦЕЛИКОМ всё что Вы хотите получить в своей программе.

Цитата Сообщение от lips Посмотреть сообщение
допустим если я напишу сначала код который разбирает этот файл со структурами и заполняет массив как мне надо...
Сколько у Вас файлов со структурами? *.h файл с описанием структуры? *.txt, *.bin и т.д. файлы содержащие значения полей структуры? сколько экземпляров (по 300 полей) в файлах?

Цитата Сообщение от lips Посмотреть сообщение
да в этом файле содержатся такие же структуры
Т.е. у Вас ещё НЕСКОЛЬКО структур по 300+ полей? Значения полей различных структур в различных файлах или в одном?
0
6 / 6 / 3
Регистрация: 03.01.2012
Сообщений: 449
27.11.2013, 10:56  [ТС]
Цитата Сообщение от SatanaXIII Посмотреть сообщение
Выводить, измерять и сохранять типы полей структуры?
значения
Цитата Сообщение от SatanaXIII Посмотреть сообщение
Вы уверены, что в памяти поля структуры лежат по порядку? К примеру, что какой-либо массив, занимающий известное вам количество байт (тип, умноженный на количество), не содержит перед собой кусок памяти, хранящий размер этого массива.
меня учили что в памяти данные идут по порядку... иначе как тогда указатель работает??
только что попробовал структуру с однотипными даными прогнать указателем.. вывел все поля по порядку... даже если массив структур... он будет работать корректно и выводить всё

просто у меня сейчас проблема в том что поля структуры разных типов...
ведь можно же поставить выравнивание и работать с адресами и не с переменными
0
6 / 6 / 3
Регистрация: 03.01.2012
Сообщений: 449
27.11.2013, 11:00  [ТС]
Цитата Сообщение от Kulgar Посмотреть сообщение
lips, опишите ЦЕЛИКОМ всё что Вы хотите получить в своей программе.


Сколько у Вас файлов со структурами? *.h файл с описанием структуры? *.txt, *.bin и т.д. файлы содержащие значения полей структуры? сколько экземпляров (по 300 полей) в файлах?

Т.е. у Вас ещё НЕСКОЛЬКО структур по 300+ полей? Значения полей различных структур в различных файлах или в одном?
вот мой файл со структурами
Вложения
Тип файла: rar 1.rar (13.4 Кб, 4 просмотров)
0
 Аватар для Kulgar
511 / 196 / 26
Регистрация: 07.08.2013
Сообщений: 814
27.11.2013, 11:08
lips, с первым вопросом ясно.
Я бы хотел получить ответы на остальные вопросы. Если Вас не затруднит.
0
6 / 6 / 3
Регистрация: 03.01.2012
Сообщений: 449
27.11.2013, 11:20  [ТС]
Цитата Сообщение от Kulgar Посмотреть сообщение
lips, с первым вопросом ясно.
Я бы хотел получить ответы на остальные вопросы. Если Вас не затруднит.
у меня есть бинарный файл с данными и файл со структурами... 2 файла.. всё больше ничего нет
с заполнением структуры данными из файла у меня проблем нет...
проблема возникает с выводом данных в стринггрид
каждый раз писать чтото подобное:
C++
1
2
3
    StringGrid1->Cells[0][i+1] = item2[i].id;
    StringGrid1->Cells[1][i+1] = item2[i].name;
        .................................................
я не хочу... хочу читать из памяти данные
для такой структуры
C++
1
2
3
4
5
6
7
8
9
struct EQUIPMENT_ADDON {
    int id;
    wchar_t name[32];
    int type;
    int num_params;
    int param1;
    int param2;
    int param3;
};
к примеру имеется примерно такой массив
C++
1
AnsiString ansi[7] = {"int","wchar_t[32]","int","int","int","int","int"};
то как мне прочитать структуру из памяти?
0
 Аватар для Kulgar
511 / 196 / 26
Регистрация: 07.08.2013
Сообщений: 814
27.11.2013, 11:25
lips, если Вы убеждены, что данные в памяти расположены последовательно, то Вам не нужны имена переменных, а нужны велечины байт порции данных. Т.е. сколько байт из памяти идёт в "int", сколько байт в "wchar_t[32]" и т.д. И идти инкриментом по указателю на начало структуры.
1
6 / 6 / 3
Регистрация: 03.01.2012
Сообщений: 449
27.11.2013, 11:31  [ТС]
Цитата Сообщение от SatanaXIII Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
struct str_t
  {
  int i;
  char ch1[10];
  char ch2[20];
  } st;
 
 
cout << &st;
в переменную int желательно

Добавлено через 45 секунд
Цитата Сообщение от Kulgar Посмотреть сообщение
lips, если Вы убеждены, что данные в памяти расположены последовательно, то Вам не нужны имена переменных, а нужны велечины байт порции данных. Т.е. сколько байт из памяти идёт в "int", сколько байт в "wchar_t[32]" и т.д. И идти инкриментом по указателю на начало структуры.
можно примерчик небольшой?

Добавлено через 3 минуты
я просто не могу представить как это будет выглядеть... если писать так:
C++
1
int *pt = &item1[0].id;
то всё идёт хорошо... пока не встретим к примеру wchar_t[32].... как тогда изменить тип указателя или что сделать?
0
 Аватар для Kulgar
511 / 196 / 26
Регистрация: 07.08.2013
Сообщений: 814
27.11.2013, 12:23
Цитата Сообщение от lips Посмотреть сообщение
я просто не могу представить как это будет выглядеть...
Вы правы. Я забыл, что всё равно нужно будет делать явное приведение типов.

Глядя на Вашу структуру сразу подумал о базах данных. Полагаю использование БД решит Вашу проблему.
0
6 / 6 / 3
Регистрация: 03.01.2012
Сообщений: 449
27.11.2013, 12:41  [ТС]
Цитата Сообщение от Kulgar Посмотреть сообщение
Вы правы. Я забыл, что всё равно нужно будет делать явное приведение типов.

Глядя на Вашу структуру сразу подумал о базах данных. Полагаю использование БД решит Вашу проблему.
надо без использования бд
проблему решил на 80%
во 2 строке вывожу как надо...
в 1 строке вывожу через указатели
вот код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
    AnsiString ansi[10] = {"int","wchar_t","int","int","int","int","int"};
    wchar_t *pt = (wchar_t*)&item1[0].id; //создал 1 байтный указатель
    for(int i=0;i<7;i++)
    {
        if(ansi[i]=="int")
        {
            StringGrid1->Cells[i][0] = (int)*pt;
            pt++;pt++; //int 2 байта
            continue;
        }
        if(ansi[i]=="wchar_t")
        {
            for(int n = 0;n<32;n++)
            {
                StringGrid1->Cells[i][0] = StringGrid1->Cells[i][0] + (wchar_t)*pt;
                pt++;
            }
            continue;
        }
 
    }
Миниатюры
Получить типы полей структуры в массив  
0
6 / 6 / 3
Регистрация: 03.01.2012
Сообщений: 449
27.11.2013, 12:42  [ТС]
теперь вопрос такой... как убрать квадраты??
0
6 / 6 / 3
Регистрация: 03.01.2012
Сообщений: 449
27.11.2013, 12:48  [ТС]
только что вывел все таблицы этой структуры.... все сходится... но в квадратах проблема
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
27.11.2013, 12:48
Помогаю со студенческими работами здесь

Можно ли обращаться к полям структуры с используя индексацию, т.е. как к одномерному массиву? Массив полей структур
Значит идея такая. Есть структура struct MyStruct { int qw; double qe; }; MyStruct qr; //пример по сложнее ...

Совместите объявление и инициализацию структуры. После инициализации структуры выполните изменение ее полей с последующи
Написать программу структурного описания каталога одной книги. Программный код решения примера #include...

Из массива Структуры получить массив стадартных типов
Есть массив структуры и функция для обработки массивов. Функция не рассчитана на обработку полей. Есть ли какой-то простой способ передать...

Типы битовых полей
Какие типы можно определять в битовых полях? Можно ли использовать битовые поля в чем-нибудь, кроме структур? В битовых полях никак...

Типы полей в COBOL
В COBOL-е используются 2 типа данных: Alphanumeric - альфанумерические (от A до 9), эквивалент Char/ArrayOfChar Numeric - цифровые...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Первый деплой
lagorue 16.01.2026
Не спеша развернул своё 1ое приложение в kubernetes. А дальше мне интересно создать 1фронтэнд приложения и 2 бэкэнд приложения развернуть 2 деплоя в кубере получится 2 сервиса и что-бы они. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит токи на L и напряжения на C в установ. режимах до и. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru