Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/15: Рейтинг темы: голосов - 15, средняя оценка - 4.60
 Аватар для Oskaria
3 / 3 / 0
Регистрация: 10.07.2009
Сообщений: 101

Чтение структурированного файла

03.06.2011, 00:49. Показов 3013. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Собственно сабж. Не знаю как реализовать - есть несколько dat файлов, разделённых на блоки по n байт, а структура этих блоков описывается в .h файле так:
C++
1
2
3
4
5
6
7
8
9
struct _ItemLooting_fld
{
  _base_fld baseclass_0;    // На это строку билдер ругается, хотя это просто "базовое поле" (одинаково для всех файлов) - номер блока, и можно объявить её как int n_Number.
  int m_nLootRate;             
  int m_nLootTime;
  int m_nOperationCount;
  int m_nLootListCount;
  char m_itmLootCodeKey[200][8];    //200 повторений блока. размер блока - 8 байт
};
Билдер понимает тип struct, но я не знаю, как, основываясь на этой структуре, прочесть файл, и загнать строки из блоков в Edit-ы.
Помимо прочего первые 4 байта файла - кол-во блоков, а следующие 4 байта - размер одного блока.

Прошу помочь мне с реализацией.
Была мысль по байтам читать файл, потом подумал - раз билдер знает, что такое struct ... {...} зачем изобретать велосипед - скорее всего есть какие-нибудь методы по-проще.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
03.06.2011, 00:49
Ответы с готовыми решениями:

Чтение структурированного файла
Здравствуйте, подскажите как лучше прочитать структурированный файл. Спасибо.

Чтение данных из структурированного файла
Здравствуйте. У меня есть программа которая находит периметр и площадь круга, треугольника, писал все через классы. Но я не могу написать...

Запись и чтение данных из структурированного файла, поиск по строкам
Доброго времени суток Всем! Вот такая тема, допустим есть некий файл txt или другой какой то просто не знаю какой лучше Так вот есть...

6
1090 / 588 / 121
Регистрация: 11.11.2008
Сообщений: 1,544
03.06.2011, 08:37
тебе поможет
C++
1
size_t fread(void *ptr, size_t size, size_t n, FILE *stream);
из stdio.h
читай хэлп, смотри примеры, юзай поиск.

Добавлено через 16 минут
примерно это будет выглядеть так:
C++
1
2
3
4
5
6
7
8
9
10
11
FILE *f;
f=fopen("1.dat", "r");
long int a;//первые 4 байта файла - кол-во блоков, 
long int b;//а следующие 4 байта - размер одного блока
 
fread(&a, 4, 1,f); // считаем 1 элемент по 4 байта (надеемся что размер long int будет 4 байта)
fread(&b, 4, 1,f); // аналогично с b
_ItemLooting_fld dat[a];
for(int i=0;i<a;i++)
fread(&dat[i], b, 1,f); //  считаем блок размером b, хотя вместо b возможно слендовало написать sizeof(_ItemLooting_fld); тут смотря на что полагаться
fclose(f);
Добавлено через 8 минут
а может можно и без цикла попробовать
C++
1
fread(&dat, b, a,f);
2
 Аватар для Oskaria
3 / 3 / 0
Регистрация: 10.07.2009
Сообщений: 101
03.06.2011, 12:04  [ТС]
Угу, тобишь он будет читать файл по блокам, до тех пор, пока тот не кончится...
А на счёт предпоследней строки - он же вроде начинает читать блок с самого начала файла, а необходимо пропустить 8 байт - уместно перед чтением вызвать fseek?

Мб вопросы глупые - но я только учусь)

на
C++
1
 _ItemLooting_fld dat[a];
ругается:
[BCC32 Error] Unit15.cpp(27): E2313 Constant expression required
Куда копать? Структура ему не нравится или может быть он хочет знать значение a до начала чтения файла?)
0
1090 / 588 / 121
Регистрация: 11.11.2008
Сообщений: 1,544
03.06.2011, 12:27
Цитата Сообщение от Oskaria Посмотреть сообщение
А на счёт предпоследней строки - он же вроде начинает читать блок с самого начала файла, а необходимо пропустить 8 байт - уместно перед чтением вызвать fseek?
мы эти 8 байт не пропускаем, а считываем в a и b, следовательно когда дойдем до предпоследней строки (это будет уже третий по счету fread) указатель будет как раз стоять после 8 байта.

я малость недосмотрел, выдели память под структуру динамически
C++
1
2
3
4
 _ItemLooting_fld *dat;
dat = new _ItemLooting_fld[a];
//...
delete dat; // в конце не забудь очистить память
не уверен до конца, но как-то так
1
 Аватар для Oskaria
3 / 3 / 0
Регистрация: 10.07.2009
Сообщений: 101
30.06.2011, 20:51  [ТС]
Цитата Сообщение от AntonChik Посмотреть сообщение
мы эти 8 байт не пропускаем, а считываем в a и b, следовательно когда дойдем до предпоследней строки (это будет уже третий по счету fread) указатель будет как раз стоять после 8 байта.

я малость недосмотрел, выдели память под структуру динамически
C++
1
2
3
4
 _ItemLooting_fld *dat;
dat = new _ItemLooting_fld[a];
//...
delete dat; // в конце не забудь очистить память
не уверен до конца, но как-то так
Прошу прощения за долгое молчание))

Работает, только я никак не уловлю - хочу я например прочесть блок, с номером 58 - как мне вывести именно его?
Если я делаю, например
C++
1
Edit3->Text = dat->m_nLootTime;
то в эдит выводится какое-то космическое число...
0
1090 / 588 / 121
Регистрация: 11.11.2008
Сообщений: 1,544
01.07.2011, 07:08
а так
C++
1
Edit3->Text = dat[58].m_nLootTime;
?
0
 Аватар для Oskaria
3 / 3 / 0
Регистрация: 10.07.2009
Сообщений: 101
01.07.2011, 10:26  [ТС]
Цитата Сообщение от AntonChik Посмотреть сообщение
а так
C++
1
Edit3->Text = dat[58].m_nLootTime;
?
Хм, я пробовал
C++
1
Edit3->Text = dat[58]->m_nLootTime;
и билдер ругался, писал что-то про то, что аргументы должны выставляться до или после "->". Спасибо, буду дома - попробую))
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
01.07.2011, 10:26
Помогаю со студенческими работами здесь

Считывание структурированного файла
Здравствуйте, написал программу с помощью которой должны считываться данные типа Reading из файла mydata.txt в вектор mod_points; Но на...

Считывание данных из структурированного файла
Всем добрый день. Возник такой вопрос. Имеется файл, в котором записаны числа примерно так: 0.1 'тра-та-та 0.00125 'тра-та-та 5...

Вывод данных из структурированного файла
помогите как вывести данные из файла в таблицу следующим образом strana | stolica | valuta россия москва рубль и тд... чтоб...

Занесение данных в массив из структурированного файла
Всем привет! Столкнулся со следующей проблемой... Есть файл, содержащий текст: 1 2 1 2 3 4 5 5 4 3 2 1 6 7 8 9 4 Требуется...

Работа со строками текстового структурированного файла
Здравствуйте! Скажите пожалуйста, как работать со строками в текстовом файле? Строки все структурированы, т.е. представлены в следующем...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru