Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 31.12.2010, 01:07
BartSmP BartSmP вне форума
Прохожий
 
Регистрация: 31.12.2010
Сообщения: 1
Репутация: 10
Вопрос Чтение из файла

Здраствуйте, моя проблемма такая:
У меня есть файл levels.mrg и есть его структура.
Мне нужно написать программу которая будет читать этот файл как текст. Если такое возможно покажите пример. Плиз.
Ответить с цитированием
  #2  
Старый 31.12.2010, 04:53
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,048
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Цитата:
Сообщение от BartSmP
Здраствуйте, моя проблемма такая:
У меня есть файл levels.mrg и есть его структура.
Мне нужно написать программу которая будет читать этот файл как текст. Если такое возможно покажите пример. Плиз.

Не могу прочитать структуру файла - все идет кракозябрами.
Но как я понял - это бинарный файл. Соответсвенно, тебе его надо прочитать как бинарный и представить в текстовом виде.
Ответить с цитированием
  #3  
Старый 31.12.2010, 12:21
Аватар для KOOL
KOOL KOOL вне форума
Активный
 
Регистрация: 06.01.2008
Адрес: Рязань
Сообщения: 306
Версия Delphi: 2009
Репутация: 6150
По умолчанию

В нормальной кодировке, если что:
Код:
Итак, поехали. Для начала для тех, кто в танке, уясню:
int = 4 байта
short = 2 байта
byte = 1 байт
Итак. Грубо говоря, файл можно разделить на 2 части: заголовок и сам файл.

1. Заголовок. Заголовок, в свою очередь, можно поделить на 3 части: заголовок легкого, заголовок среднего, заголовок сложного уровней.

Структура заголовка (схематично): [int кол-во уровней на easy] { [int номер_байта][название уровня][byte нулевой байт] ... } [int кол-во уровней на medium] { [int номер_байта][название уровня][byte нулевой байт] ... } [int кол-во уровней на hard] { [int номер_байта][название уровня][byte нулевой байт] ... }

Это и есть "3 части" заголовка.

Рассмотрим их поподробнее.
Сначала идет int - количество уровней (на опр. уровне сложности).
Потом идет запись (объединяю в контейнер): { int - номер байта (номер байта в файле, считая с нуля, где записан сам уровень.), название уровня, byte - закрывающий нулевой байт }. Эта запись повторяется столько раз, сколько уровней на данном уровне сложности - адрес начала для каждого трека.
Потом аналогично для medium и для hard.

2. Сами треки
Эту часть файла тоже можно условно разделить на 2 части: информация о треке и сам трек.

Как раз начало этой, адрес, где эта запись начинается в файле (номер байта) мы читаем в заголовке файла. То есть если в mrg файле 30 уровней (10/10/10), то таких "записей уровня" будет 30 - они просто идут друг за другом, ничем не разделяются.

"Информация" в файле записана следующим образом:
[byte - 0x33 - с этого байта начинаются все треки][int* - положение старта по оси X][int* - положение старта по оси Y (положение не флажка, а мотыка)][int* - положение финиша по оси X][int* - положение финиша по оси Y (в принципе ни от чего не зависит, постоянно 0)][short - количество точек][int - первая точка по оси X][int - первая точка по оси Y]
Сам трек записывается как последовательность байтов { [byte - точка по оси X][byte точка по оси Y] }: [byte - точка по оси X][byte точка по оси Y][byte - точка по оси X][byte точка по оси Y]...[byte - точка по оси X][byte точка по оси Y].
2 байта - X и Y = 1 точка. (количество точек, как я уже сказал, записано в "заголовке", "информации" уровня). 
Копай в сторону FileStream. Здесь полно примеров, как с ним работать. Про структуру: здесь [x] - это некое значение, {[x1],[x2]...} - повторяющийся несколько раз блок, т.е. в структуре последовательность [n] {S} означает, что блок S надо считать в цикле n раз. Также нужно заметить, что в заголовке содержится индекс, данные из него надо бы сохранять в отдельную структуру
В итоге: считываем, форматируем, что нужно, в строку, выводим
__________________
РГРТУ - ФВТ - Системы Автоматизированного ПРоектирования. ت
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 15:11.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter