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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.91
lips
2 / 2 / 0
Регистрация: 03.01.2012
Сообщений: 287
#1

Способ прочитать файл с базой данных - C++

25.11.2013, 10:58. Просмотров 1613. Ответов 57
Метки нет (Все метки)

есть база данных в формате .dat
есть файл с структурами и типами в формате .h

что использовать какие компоненты или sql тут потребуется чтобы вывести базу данных, просьба подсказать! пожалуйста!

Добавлено через 36 минут
формат .data... прошу прощение
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.11.2013, 10:58
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Способ прочитать файл с базой данных (C++):

Прочитать файл в обратном порядке т.е. встать в конец файла и прочитать до начальной позиции - C++
подскажите пожалуйста как можно прочитать файл в обратном порядке т.е. стать в конец файла и прочитать до начальной позиции?

Открыть файл, прочитать. Все, что находится после двоеточия перенести в другой файл - C++
Работа с текстовыми файлами Друзья, подскажите, имеется файлик *.txt в нем в строчку набор символов (разной длины), часть символов...

Данные записать в файл F1.txt, затем прочитать оттуда, обрабатывались и записывались в бинарный файл F2.bin с проверкой - C++
Никак не получается отладить в BC++ 3.1. Как сделать в классах так, чтобы введённые данные записывались в файл F1.txt, затем читались...

составить программу,которая создает файл, состоящий из 10 значений типа int. прочитать файл и вычислить сумму его элементов - C++
составить программу,которая создает файл, состоящий из 10 значений типа int. прочитать файл и вычислить сумму его элементов

самый короткий способ открыть файл - C++
итак, задача: открыть файл input.txt считать с него цифру и вывести в output.txt. Нужен самый короткий код!:rtfm: #include <fstream> ...

База данных "Телеателье": создать систему управления базой данных (СУБД) - C++
Задача: Создать систему управления базой данных (СУБД) в которой предусмотреть следующие режимы: создание БД, вывод БД, добавление...

57
lips
2 / 2 / 0
Регистрация: 03.01.2012
Сообщений: 287
25.11.2013, 16:23  [ТС] #31
144 пришлось поставить, получилось

Добавлено через 1 минуту
всем большое спасибо за помощь!
0
newbie666
Заблокирован
25.11.2013, 16:25 #32
Цитата Сообщение от lips Посмотреть сообщение
144 пришлось поставить, получилось
ну вот видишь, тебя не правильно проинформировали о размере заголовка. препода в ад
0
gazlan
3133 / 1909 / 285
Регистрация: 27.08.2010
Сообщений: 5,132
Записей в блоге: 1
25.11.2013, 17:51 #33
TS всех обманул :-)

Во-первых, это многостраничный файл, так что искомая структура относится только к первой странице, дальше все по-другому (разбираться не стал). Во-вторых, сама структура им описана неверно, она такая:

C++
1
2
3
4
5
6
7
8
9
10
struct EL_RECORD
{
   int            _Type;
   int            _NumParams;
   DWORD          _dwID;
   char           _pszText[MAX_TEXT_SIZE];
   int            _Param1;
   int            _Param2;
   int            _Param3;
};
Размер заголовка - 0x87

В эташе дамп для 7,000+ записей, дальше формат уже другой.
0
Вложения
Тип файла: 7z elements.txt.7z (90.9 Кб, 1 просмотров)
lips
2 / 2 / 0
Регистрация: 03.01.2012
Сообщений: 287
26.11.2013, 08:55  [ТС] #34
Цитата Сообщение от gazlan Посмотреть сообщение
В эташе дамп для 7,000+ записей, дальше формат уже другой.
там дальше другие структуры.... они описаны в файле...
мне надо создать указатель на список структур
подскажите что нужно для этого?
0
newbie666
Заблокирован
26.11.2013, 11:18 #35
Цитата Сообщение от lips Посмотреть сообщение
там дальше другие структуры.... они описаны в файле...
полное описание давай сюда, гадать что в твоё файле - не благодарное занятие
0
lips
2 / 2 / 0
Регистрация: 03.01.2012
Сообщений: 287
26.11.2013, 11:24  [ТС] #36
Цитата Сообщение от newbie666 Посмотреть сообщение
полное описание давай сюда, гадать что в твоё файле - не благодарное занятие
пытаюсь написать программу чтобы достать из бинарного файла данные для заполнения этих структур
0
lips
2 / 2 / 0
Регистрация: 03.01.2012
Сообщений: 287
26.11.2013, 11:26  [ТС] #37
если нужно вот бинарный файл и структуры... но мне желательно только подсказать как лучше это сделать...
0
Вложения
Тип файла: rar qqq.rar (1.96 Мб, 6 просмотров)
newbie666
Заблокирован
26.11.2013, 11:33 #38
оо парень да ты попал, это ж такой геморой тебе каждую структуру по отдельности читать., а где хранить потом ...да ваще бредятина. Смысл такой. Объявляешь структуру и читаешь из поток read-м столько байт, сколько весит структура, что из потока считал - этого уже там нет, так что чтоб тебе считать следующую структуру - тебе ничего делать особенного не надо, дальше из потока читаешь столько байт, сколько весит твоя следующая структура вот и в всё
0
lips
2 / 2 / 0
Регистрация: 03.01.2012
Сообщений: 287
26.11.2013, 12:30  [ТС] #39
Цитата Сообщение от newbie666 Посмотреть сообщение
оо парень да ты попал, это ж такой геморой тебе каждую структуру по отдельности читать., а где хранить потом ...да ваще бредятина. Смысл такой. Объявляешь структуру и читаешь из поток read-м столько байт, сколько весит структура, что из потока считал - этого уже там нет, так что чтоб тебе считать следующую структуру - тебе ничего делать особенного не надо, дальше из потока читаешь столько байт, сколько весит твоя следующая структура вот и в всё
по одной структуре читается много таблиц.... как узнать когда закончилась одна и началась другая структура?
0
newbie666
Заблокирован
26.11.2013, 13:09 #40
Ну ты понимаешь, что такое файловый поток?
Вот смотри, ты открыл файл файловым потоком fstream, у тебя в потоке все данные файла и указатель текущей позиции на нуле, то есть, например, ты открыл поток с каким то содержанием и у тебя получилась вот такая кишка:
1234567890ABCDF и тд, это байты или данные какие то твои в потоке,
после того, как ты оттуда прочитал например 3 байта, у тебя в потоке осталось:
4567890ABCDF, тоесть первый 3 байта, 123 - уже считались, после того, как они считались, у тебя указатель перемещается автоматом как бы дальше понимаешь?

то есть после команды fs.read((char*)&item, sizeof(item));, где item = твоя структура, ты из потока прочитаешь ровно столько байт, сколько твоя структура в потоке занимала, тоесть
Цитата Сообщение от lips Посмотреть сообщение
как узнать когда закончилась одна и началась другая структура?
ты это автоматический узнаёшь как бы, после чтения кол-ва байт, равным размеру твоей структуры у тебя указатель в потоке уже стоит дальше, тоесть при следующем чтении ты будешь читать уже другую структуру
0
alsav22
5425 / 4820 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
26.11.2013, 13:29 #41
Цитата Сообщение от newbie666 Посмотреть сообщение
после чтения кол-ва байт, равным размеру твоей структуры у тебя указатель в потоке уже стоит дальше, тоесть при следующем чтении ты будешь читать уже другую структуру
Нужно только добавить: если в файл записаны структуры одинакового размера. А тут разве так?

Добавлено через 4 минуты
Для таких дел нужно: или точно знать формат записи в файл, или код, которым этот файл создавался.
0
lips
2 / 2 / 0
Регистрация: 03.01.2012
Сообщений: 287
26.11.2013, 13:33  [ТС] #42
Цитата Сообщение от newbie666 Посмотреть сообщение
Ну ты понимаешь, что такое файловый поток?
Вот смотри, ты открыл файл файловым потоком fstream, у тебя в потоке все данные файла и указатель текущей позиции на нуле, то есть, например, ты открыл поток с каким то содержанием и у тебя получилась вот такая кишка:
1234567890ABCDF и тд, это байты или данные какие то твои в потоке,
после того, как ты оттуда прочитал например 3 байта, у тебя в потоке осталось:
4567890ABCDF, тоесть первый 3 байта, 123 - уже считались, после того, как они считались, у тебя указатель перемещается автоматом как бы дальше понимаешь?

то есть после команды fs.read((char*)&item, sizeof(item));, где item = твоя структура, ты из потока прочитаешь ровно столько байт, сколько твоя структура в потоке занимала, тоесть

ты это автоматический узнаёшь как бы, после чтения кол-ва байт, равным размеру твоей структуры у тебя указатель в потоке уже стоит дальше, тоесть при следующем чтении ты будешь читать уже другую структуру
спасибо большое за объяснение...
скажите теперь как мне в листбокс записать название структур? которые у меня в .h фале

Добавлено через 3 минуты
только что разобрался... перед началом чтения структуры из файла нужно прочитать интовое значение оно и будет являтся размером структуры
0
alsav22
5425 / 4820 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
26.11.2013, 13:34 #43
Цитата Сообщение от lips Посмотреть сообщение
только что разобрался... перед началом чтения структуры из файла нужно прочитать интовое значение оно и будет являтся размером структуры
Тогда другое дело.
0
newbie666
Заблокирован
26.11.2013, 13:39 #44
Цитата Сообщение от lips Посмотреть сообщение
перед началом чтения структуры из файла нужно прочитать интовое значение оно и будет являтся размером структуры
это нормальная практика, когда сначала в бинарнике идёт размер следующего блока, а потом сам блок, т.к. размер блока, если он состоит не из простых типов данных, размер которых известен заранее (типа char, bool ...), может меняться, например у тебя сохранена в блоке строка, а хрен его знает, какой она длинны - для этого размер и загоняют в бинарник

Цитата Сообщение от alsav22 Посмотреть сообщение
Нужно только добавить: если в файл записаны структуры одинакового размера. А тут разве так?
а тут ему походу не в цикле надо будет сотню своих РАЗНЫХ структур читать, а каждую по отдельности
0
lips
2 / 2 / 0
Регистрация: 03.01.2012
Сообщений: 287
26.11.2013, 13:45  [ТС] #45
ещё 2 не решенных вопроса:
как мне в листбокс записать название структур? которые у меня в .h фале
можно ли в стринг грид выводить нужную структуру НЕ писав при этом каждый раз что то типо такого:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
    
        StringGrid1->RowCount = size_struct; 
    StringGrid1->ColCount = 7; //количество полей у структуры
    for(int i=0;i<size_struct;i++)
    {
        StringGrid1->Cells[0][i+1] = item[i].id;
        StringGrid1->Cells[1][i+1] = item[i].name;
        StringGrid1->Cells[2][i+1] = item[i].type;
        StringGrid1->Cells[3][i+1] = item[i].num_params;
        StringGrid1->Cells[4][i+1] = item[i].param1;
        StringGrid1->Cells[5][i+1] = item[i].param2;
        StringGrid1->Cells[6][i+1] = item[i].param3;
    }
всего 163 структуры... полей в каждой может быть от 5 до 50... не учитывая структуры в структуре
что можете посоветовать?
0
26.11.2013, 13:45
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.11.2013, 13:45
Привет! Вот еще темы с ответами:

работа с базой данных - C++
Написать программу работы с базой данных. База хранится в оперативной памяти в виде структуры. Структура содержит набор переменных разного...

Работа с базой данных - C++
Добрый день! Прошу совета! Задание было, написать БД по билетам вокзала. Так вот, все процедуры работают, кроме одной, не могу догнать, что...

Способ вывода данных на экран - C++
Как выбрать способ вывода данных (в файл или на консоль), чтобы при последующих вычислениях оставался только один способ?

Прочитать файл - C++
В файле находятся строки в таком виде: энтузиазм:enthusiasm энтузиаст:enthusiast энцефацит:encephalitis ...


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

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

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