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

Запрос табличных данных - C++

Восстановить пароль Регистрация
 
DarkMasterW
4 / 4 / 0
Регистрация: 25.10.2013
Сообщений: 227
03.03.2014, 14:54     Запрос табличных данных #1
Есть программа, она обращаясь к длл передает в виде char* некоторый набор параметров и псевдоним по которому в дальнейшем будет обращаться к этим параметрам.

1)В каком виде будет правильно хранить эти данные, чтобы потом можно было как-то адекватно обратиться через пришедший char* запрос c псевдонимом стороки? Массив/список/структуру/объект?

Табличка не большая и больше, чем 50*5 вряд ли когда-то будет, в основном это будет 1-3*5. Строки в этой табличке должна быть возможность спокойно удалять без прекращения работы. Дело в том, что с табличкой одновременно будет работать 1-2 потока на каждую строку. Если взять массив и удалить строку, то съедут индексы и получится не хорошо.
Насколько я понимаю надо смотреть в сторону структуры, но как потом к ней обращаться?

Спасибо.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
THE--MASTER
Заблокирован
03.03.2014, 15:08     Запрос табличных данных #2
в чём суть твоего вопроса? Ну храни данные в std::vector<std::vector<std::wstring>>
DarkMasterW
4 / 4 / 0
Регистрация: 25.10.2013
Сообщений: 227
03.03.2014, 15:22  [ТС]     Запрос табличных данных #3
Вектор пока еще не изучал, сходу ничего не скажу. Пошел читать.
По суть вопрос в том, как пришедший char* воспринимать индексом? Какие контейнеры под это использовать?
THE--MASTER
Заблокирован
03.03.2014, 15:27     Запрос табличных данных #4
Цитата Сообщение от DarkMasterW Посмотреть сообщение
как пришедший char* воспринимать индексом?
каким индексом?
DarkMasterW
4 / 4 / 0
Регистрация: 25.10.2013
Сообщений: 227
03.03.2014, 15:33  [ТС]     Запрос табличных данных #5
Давайте страшным кодом. Так будет понятнее.
C++
1
2
3
item.count = 21;
char* id = "item"; // Это прилетает внутрь длл.
cout << id.count;
смысл примерно такой.
THE--MASTER
Заблокирован
03.03.2014, 15:38     Запрос табличных данных #6
и в чём проблема?
DarkMasterW
4 / 4 / 0
Регистрация: 25.10.2013
Сообщений: 227
03.03.2014, 15:47  [ТС]     Запрос табличных данных #7
В том, что будет обращение к id, а не item.count.

Давайте чуть иначе попробуем.
C++
1
2
3
4
5
6
7
8
9
char* id = "item 1 2 3 4"; // Это прилетает внутрь длл.
id.color = 1; // По факту должен быть создан item.color. Как?
id.size = 2;
id.count = 3;
id.speed = 4;
 
char* getID = "item"; // Это прилетает внутрь длл.
char* getType = "size"; // Это прилетает внутрь длл.
cout << getID.getType; // возвращает item.size
. Как?

Я понимаю, какой тут звездец написан. Вопрос в том как этот функционал реализовать.
THE--MASTER
Заблокирован
03.03.2014, 15:55     Запрос табличных данных #8
чё ты хочешь сделать - то?
DarkMasterW
4 / 4 / 0
Регистрация: 25.10.2013
Сообщений: 227
03.03.2014, 16:18  [ТС]     Запрос табличных данных #9
Есть внешний скриптовый движок(закрытый) с поддержкой длл. Общение с длл происходит через char*. В длл будет направляться группа параметров, в соответствии с которыми будет происходить специфический мониторинг в отдельном потоке, скриптовый движок будет периодически заправшивать текущие результаты мониторинга. На данный момент все вроде стройно. Вот только количество этих мониторингов не должно быть ограничено и быть динамическим. Тут встает вполне логичный вопрос:"как обратиться к результатам конкретного мониторинга".
THE--MASTER
Заблокирован
03.03.2014, 16:23     Запрос табличных данных #10
В общем мне не очень была интересна твоя программа, я спрашивал про конкретную суть проблемы.
В общем, ну знаю, что ты там хочешь сделать, скажу лишь, что передавать указатели на память в DLL и обратно нужно выделив её аллокатором SysAllocateString, в DLL её удалять так SysFreeString
DarkMasterW
4 / 4 / 0
Регистрация: 25.10.2013
Сообщений: 227
03.03.2014, 17:12  [ТС]     Запрос табличных данных #11
Интерфейс обмена программы и длл есть и он прекрасно работает. Менять его никто не будет. Как еще объяснить суть я уже теряюсь.
У нас есть:
char* 1 = "name1 size:val1 color:val2 count:val3 speed:val4";
char* 2 = "name2 size:val5 color:val6 count:val7 speed:val8";
char* 3 = "name9 size:val10 color:val11 count:val12 speed:val13";
как сохранить данные строки, чтобы потом можно было к ним обращаться для получения данных, используя:
char* get = "name2 color"// name должен указывать на строку, color на столбец.
как используя get получить val6?
при удалении любой из строк не должна изменяться адресация в памяти других строк и схема обращения к другим строкам(с ними будет вестись работа в потоках).
DrOffset
6461 / 3835 / 886
Регистрация: 30.01.2014
Сообщений: 6,630
03.03.2014, 17:36     Запрос табличных данных #12
Если я все правильно понял, то наверное что-то наподобие этого:
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
struct Data
{
    Data(char const * data)
    {
        //разбор "size:val1 color:val2 count:val3 speed:val4" формата из data
    }
    std::string size;
    std::string color;
    std::string count;
    std::string speed;
};
 
int main()
{
    std::map<std::string, Data> m;
 
    m.insert(std::make_pair("name1", Data("size:val1 color:val2 count:val3 speed:val4")));
 
    std::map<std::string, Data>::const_iterator fit = m.find("name1");
 
    if(fit != m.end())
    {
        fit->second.size;
        fit->second.color;
        // и т.д.
    }
}
Естественно при многопоточном использовании доступ к m необходимо защищать объектом синхронизации.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.03.2014, 18:55     Запрос табличных данных
Еще ссылки по теме:

Путаница с типами данных TCHAR и char. Какой тип данных выбрать? C++
В зависимости от данных чисел, уменьшить или увеличить оба данных числа C++
C++ Есть массив в виде табличных данных, как его поделить на отдельные элементы для дальнейшей работы?

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

Или воспользуйтесь поиском по форуму:
DarkMasterW
4 / 4 / 0
Регистрация: 25.10.2013
Сообщений: 227
03.03.2014, 18:55  [ТС]     Запрос табличных данных #13
Потестил, действительно то, что нужно. Огромное спасибо.
Yandex
Объявления
03.03.2014, 18:55     Запрос табличных данных
Ответ Создать тему
Опции темы

Текущее время: 16:31. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru