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

Открыть файл по структуре и вытащить данные - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.64
spyeye
31 / 31 / 1
Регистрация: 06.08.2012
Сообщений: 155
06.08.2012, 22:45     Открыть файл по структуре и вытащить данные #1
Всем привет, я изучаю C++ и встала такая задача:
Есть структура:
C++
1
2
3
4
5
struct StoreList {
// другие переменные ...
char NpcName[40];
// другие переменные ...
};
Есть *.dat файл.

Как мне открыть этот .dat файл и вытащить много-много NpcName'ов ( их там больше 100 )?

Что-то типа того, как Structorian открывает файлы и читает по структуре из них данные.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Jupiter
Каратель
Эксперт C++
6543 / 3963 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
06.08.2012, 23:04     Открыть файл по структуре и вытащить данные #2
файл текстовый/бинарный? какая структура файла?
spyeye
31 / 31 / 1
Регистрация: 06.08.2012
Сообщений: 155
06.08.2012, 23:09  [ТС]     Открыть файл по структуре и вытащить данные #3
Цитата Сообщение от Jupiter Посмотреть сообщение
файл текстовый/бинарный? какая структура файла?
Ой, извините, забыл залить сам файл.. В вложениях.
Вложения
Тип файла: zip Store.zip (38.6 Кб, 15 просмотров)
panicwassano
591 / 559 / 20
Регистрация: 07.11.2010
Сообщений: 2,004
06.08.2012, 23:13     Открыть файл по структуре и вытащить данные #4
файл бинарный? тогда какая структура файла?
spyeye
31 / 31 / 1
Регистрация: 06.08.2012
Сообщений: 155
06.08.2012, 23:17  [ТС]     Открыть файл по структуре и вытащить данные #5
Цитата Сообщение от panicwassano Посмотреть сообщение
файл бинарный? тогда какая структура файла?
Файл прикреплен выше, я честно говоря сам не знаю Думаю, что бинарный.
Вот его приблизительная структура на C++:
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
// File: Store.dat
struct StoreListFile
{
unsigned int nBlocks;
unsigned int nColumns;
//child StoreListBlock [count=nBlocks]; 
}
struct StoreListBlocks // :public StoreListFile
{
unsigned int nCount;
unsigned char Model; 
char Race[12];
char ShopName[32];
char NpcName[32];
char ServerID[32];
unsigned int ExchangeType; 
unsigned char AccessCorner; 
unsigned int LookAround;
float UpCff; 
unsigned int Items; 
unsigned int Identificator;
unsigned char Item; 
unsigned char Button;
char ShopMsg_1[1024];
char ShopMsg_2[1024];
char ShopMsg_3[1024];
unsigned int CostMultiple; 
unsigned char Modification; 
unsigned int CountItems; 
unsigned int Identificator;
unsigned char Time;
unsigned int Count; 
}
panicwassano
591 / 559 / 20
Регистрация: 07.11.2010
Сообщений: 2,004
06.08.2012, 23:18     Открыть файл по структуре и вытащить данные #6
Цитата Сообщение от spyeye Посмотреть сообщение
Файл прикреплен выше, я честно говоря сам не знаю Думаю, что бинарный.
тогда чтобы вытащить структуру данного файла не мешало бы знать
spyeye
31 / 31 / 1
Регистрация: 06.08.2012
Сообщений: 155
06.08.2012, 23:21  [ТС]     Открыть файл по структуре и вытащить данные #7
Цитата Сообщение от panicwassano Посмотреть сообщение
тогда чтобы вытащить структуру данного файла не мешало бы знать
Структура есть, см. мой пост выше, отредактировал.
Не понятно, как по ней открыть файл и вытащить данные
-=ЮрА=-
Заблокирован
Автор FAQ
07.08.2012, 16:01     Открыть файл по структуре и вытащить данные #8
spyeye, пожалуйста чтобы я тебе нормально помог ответь на вопрос - это точная структура которой производилась запись в файл?
Цитата Сообщение от spyeye Посмотреть сообщение
// File: Store.dat
struct StoreListFile
{
unsigned int nBlocks;
unsigned int nColumns;
//child StoreListBlock [count=nBlocks];
}
struct StoreListBlocks // ublic StoreListFile
{
unsigned int nCount;
unsigned char Model;
char Race[12];
char ShopName[32];
char NpcName[32];
char ServerID[32];
unsigned int ExchangeType;
unsigned char AccessCorner;
unsigned int LookAround;
float UpCff;
unsigned int Items;
unsigned int Identificator;
unsigned char Item;
unsigned char Button;
char ShopMsg_1[1024];
char ShopMsg_2[1024];
char ShopMsg_3[1024];
unsigned int CostMultiple;
unsigned char Modification;
unsigned int CountItems;
unsigned int Identificator;
unsigned char Time;
unsigned int Count;
}
если да, то мне надо немного времени подумать...
-=ЮрА=-
Заблокирован
Автор FAQ
07.08.2012, 16:29     Открыть файл по структуре и вытащить данные #9
spyeye, вот по быстрому
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>
using namespace std;
 
struct StoreListBlock // :public StoreListFile
{
    int nCount;
    char Model; 
    char Race[12];
    char ShopName[32];
    char NpcName[32];
    char ServerID[32];
    int ExchangeType; 
    char AccessCorner; 
    int LookAround;
    float UpCff; 
    int Items; 
    int Identificator1;
    char Item; 
    char Button;
    char ShopMsg_1[1024];
    char ShopMsg_2[1024];
    char ShopMsg_3[1024];
    int CostMultiple; 
    char Modification; 
    int CountItems; 
    int Identificator2;
    char Time;
    int Count; 
};
 
void printStoreListBlock(StoreListBlock pBlock);
 
int main()
{
    StoreListBlock pBlock = {0};
    ifstream ifs("Store.dat",ios::binary);
    if(!ifs.is_open())
        cout<<"Error open Store.dat\n";
    else
    {
        while(!ifs.eof())
        {
            ifs.read((char *)&pBlock,sizeof(StoreListBlock));
            printStoreListBlock(pBlock);
            system("pause");
        }
        ifs.close();
    }
    return 0;
}
 
void printStoreListBlock(StoreListBlock pBlock)
{
    cout<<"nCount  : "<<pBlock.nCount<<endl;
    cout<<"Model   : "<<pBlock.Model <<endl;
    cout<<"Race    : "<<pBlock.Race  <<endl;
    cout<<"ShopName: "<<pBlock.ShopName<<endl;
    cout<<"NpcName : "<<pBlock.NpcName <<endl;
    cout<<"ServerID: "<<pBlock.ServerID<<endl;
    cout<<"ExchangeType  : "<<pBlock.ExchangeType<<endl;
    cout<<"AccessCornere : "<<pBlock.AccessCorner<<endl;
    cout<<"LookAround    : "<<pBlock.LookAround  <<endl;
    cout<<"UpCff    : "<<pBlock.UpCff <<endl;
    cout<<"Items    : "<<pBlock.Items <<endl;
    cout<<"Identificator1: "<<pBlock.Identificator1<<endl;
    cout<<"Item     : "<<pBlock.Item  <<endl;
    cout<<"Button   : "<<pBlock.Button<<endl;
    cout<<"ShopMsg_1: "<<pBlock.ShopMsg_1<<endl;
    cout<<"ShopMsg_2: "<<pBlock.ShopMsg_2<<endl;
    cout<<"ShopMsg_3: "<<pBlock.ShopMsg_3<<endl;
    cout<<"CostMultiple  : "<<pBlock.CostMultiple<<endl;
    cout<<"Modification  : "<<pBlock.Modification<<endl;
    cout<<"CountItems    : "<<pBlock.CountItems  <<endl;
    cout<<"Identificator2: "<<pBlock.Identificator2<<endl;
    cout<<"Time          : "<<pBlock.Time        <<endl;
    cout<<"Count         : "<<pBlock.Count       <<endl;
}
Миниатюры
Открыть файл по структуре и вытащить данные  
spyeye
31 / 31 / 1
Регистрация: 06.08.2012
Сообщений: 155
07.08.2012, 21:02  [ТС]     Открыть файл по структуре и вытащить данные #10
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
spyeye, пожалуйста чтобы я тебе нормально помог ответь на вопрос - это точная структура которой производилась запись в файл?

если да, то мне надо немного времени подумать...
Структура неточная, я ещё её до конца не доделал, пару полей в ней отсутствует и возможно неправильные типы есть..
Спасибо за помощь, по твоему коду попытаюсь Всё доделать
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.08.2012, 22:15     Открыть файл по структуре и вытащить данные
Еще ссылки по теме:

Работа с файлами(открыть файл, считать данные в double массив) C++
Открыть файл, прочитать. Все, что находится после двоеточия перенести в другой файл C++
В структуре хранятся следующие данные об учениках: фамилия, имя, отчество, рост, масса. Создать массив стру C++

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

Или воспользуйтесь поиском по форуму:
-=ЮрА=-
Заблокирован
Автор FAQ
08.08.2012, 22:15     Открыть файл по структуре и вытащить данные #11
spyeye, ещё раз повторюсь, научитесь выставлять кодировку проекта, дефалтом идёт юникод, с которым ещё надо уметь работать, сингл чары идут при кодировке Multy-Byte-Character-Set
В аттаче полностью компилирующийся проект по коду поста 9
Если что то не компилируется - значит что то неверно делаете
Миниатюры
Открыть файл по структуре и вытащить данные   Открыть файл по структуре и вытащить данные   Открыть файл по структуре и вытащить данные  

Вложения
Тип файла: rar spyeye_VS9_proj.rar (34.0 Кб, 18 просмотров)
Yandex
Объявления
08.08.2012, 22:15     Открыть файл по структуре и вытащить данные
Ответ Создать тему
Опции темы

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