Render.ru

Чтение игрового файла ....

Ман232

Пользователь сайта
Рейтинг
2
#1
Добрый день, какими методами можно прочитать игровой файл и достать нужную информацию?

Что нужно:
1. Прочитать файл
2. Вывести нужную информацию


{Skeleton
{bone "hous-beam1" -- пропускаем (у него нет параметров)
{bone "window1" -- берем название
{Matrix34 -- его параметры (полностью матрицу)
-1 0 0
0 -0.0467387 0.998907
0 0.998907 0.0467387
-62.8832 22.4363 30.2534
} -- конец
{bone "exterior" -- берем название
{Position -0.319641 -0.406006 67.8459} -- берем параметры (можно полностью взять Position
}
}
}
(Либо разбить на блоки { ..... } например:
#("{Skeleton", {bone "hous-beam1", {bone "window1" {Matrix34 0 0 0 0 0 0 0 0 0 0 0 0}, ....., "}", "}")
Что-то типо этого.
)

Что тут нужно:
1. Главный раздел- это у нас: Skeleton с него все считываем
2. Дочерний раздел - это у нас: bone - кости
3. Параметры ДР: Matrix34, Position - в pastebin все описано.
Есть и другие параметры их можно пропустить.

И еще, если к примеру у bone "***" нет параметров типа Matrix34, Position то их пропускаем (bone)

Полный файл: http://pastebin.com/DT084GZB
Название и Параметры позиции или матрицы для блоков Volume.
}

Либо можно раскинуть по массивам, но поддерживая разделы (внутри спойлера все написано и описано)

Простите, но наработков нет никаких по этому вопросу..
Я понимаю это сложно сделать, но хоть кто-то знает натолкните на нужно е русло.
 
Рейтинг
31
#3
Прочитать файл - не проблема. Распарсить - тоже решаемо. Непонятен п.2. Что значит "вывести нужную информацию"? Куда вывести? Нужную для чего?

"Раскинуть по массивам" так вот просто не получится. В исходном файле структура данных древовидная. Т.е. после парсинга будет массив корневых узлов. Но каждый корневой узел будет содержать массив дочерних узлов, которые, в свою очередь, тоже будут иметь массив дочерних узлов. Максимальный уровень вложенности у Skeleton вроде 3.

Ты готов работать с такой структурой?
 

Ман232

Пользователь сайта
Рейтинг
2
#4
Прочитать файл - не проблема. Распарсить - тоже решаемо. Непонятен п.2. Что значит "вывести нужную информацию"? Куда вывести? Нужную для чего?

"Раскинуть по массивам" так вот просто не получится. В исходном файле структура данных древовидная. Т.е. после парсинга будет массив корневых узлов. Но каждый корневой узел будет содержать массив дочерних узлов, которые, в свою очередь, тоже будут иметь массив дочерних узлов. Максимальный уровень вложенности у Skeleton вроде 3.

Ты готов работать с такой структурой?

Да. Вот только Я не знаю как это сделать...
 
Рейтинг
31
#5
Я накидал скриптик. Это как бы основа. Но рабочвя. Обработка ошибок отсутствует полностью. Как и комментарии. Это ты уж сам...

Сначала смотри функцию parse_and_print. Это как бы запускалка для всего остального. Туда же попадают распарсенные данные - та самая структура данных, о которой я писал выше.

Структура ItemStruct:
В поле itype (типа string) содержится тип узла.
В поле idata (типа array) собираются все данные узла. Имя узла, если оно есть, идёт первым.
В поле ichildren (типа array) собираются узлы-потомки текущего узла.
Если поле не заполнено, его значение undefined. (Первое поле заполнено всегда.)

К сожалению встроенная функция readToken некорректно работает с кавычками. Поэтому пришлось слепить аналог: структуру GetTokStruct. Перед работой с функциями этой структуры поле fs необходимо инициализировать потоком, уже открытым на чтение. Поле структуры delimiters содержит символы по которым входные данные разбиваются на токены. Её содержимое можно изменить при необходимости.

Функция printItemStruct служит только для вывода на консоль дампа узла. Для парсинга она не нужна.

Всё остальное вроде достаточно просто.
 

Вложения

  • 2,4 КБ Просмотров: 271

Ман232

Пользователь сайта
Рейтинг
2
#6
Я накидал скриптик. Это как бы основа. Но рабочвя. Обработка ошибок отсутствует полностью. Как и комментарии. Это ты уж сам...

Всё остальное вроде достаточно просто.

Простите за капс.

СПАСИБО ТЕБЕ БОЛЬШОЕ! Выручил!
 
Сверху