Вопрос

Я создаю игру в Visual Studio 2008, и для создания уровней у меня будет два типа файлов (на самом деле их больше, но эти два - единственные, важные для моего вопроса), которые мне нужно проанализировать.Один из них будет диктовать содержимое уровня и будет выглядеть примерно так:

LevelName = "Уровень выборки"

Object1Type = "Пользовательский объект"

Объект1Файл = "WideFloor_DF"

Объект1позиция = 600,600

Object2Type = "Круг"

Объект2позиции = 550, 500

Масса объекта2 = 5

и т.д.

Другой будет диктовать свойства для пользовательских объектов и выглядеть примерно так:

Имя = "Широкий пол"

Масса = 1

Геометрическая карта = "WideFloor_GM"

IsStatic = истина

и т.д.

Я не очень хорошо знаком с регулярными выражениями (читать:мне они не нравятся, потому что слишком похожи на линейный шум, чтобы их было легко понять) и мне было интересно, есть ли более простой метод, чем использование тонны регулярных выражений?

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

Это было полезно?

Решение

Как насчет использования XML-файлов?Вы можете легко читать и записывать их, используя объекты XmlReader и XmlWriter, и вам вообще не придется иметь дело с регулярными выражениями.

<Level name="Sample Level">
   <Object type="CustomObject" file="WideFloor_DF" positionX="600" positionY="600" />
   <Object type="Circle" file="WideFloor_DF" positionX="500" positionY="500" mass="5" />
</Level>     

Другие советы

Если вы все равно собираетесь иметь свои файлы в удобочитаемом формате, почему бы не использовать XML?

Если у вас есть контроль над форматом файла, вы можете попробовать что-нибудь с существующим анализатором, например XML или INI-файлы, оба из которых имеют анализаторы в .NET.

Если вы продаете в вышеуказанном формате, вы можете использовать такой инструмент, как Лекс чтобы сгенерировать ваш синтаксический анализатор для вас.

Одним из альтернативных подходов может быть определение класса, который имеет свойства / коллекции для хранения всех этих конфигурационных данных, и сделать его [Сериализуемым].Затем вы можете заполнить пример конфигурации, сериализовать его в файл, и тогда у вас получится полный XML-конфигурационный файл, который вы сможете редактировать вручную.Когда вы будете готовы использовать конфигурацию, просто десериализуйте XML-файл обратно в объект config в вашем приложении.

Если вы абсолютно настаиваете на использовании этого формата файла, вы можете создать объект, который читает файл построчно, извлекая данные из левой части '=' и помещая их в Словарь в качестве ключа, а все, что находится справа от '=', - в качестве значения.

Однако я должен повторить приведенные выше ответы, в которых говорится об использовании XML-документа вместе с объектом XmlDocument .Вы изучали LINQ для XML?

что ж, если я понял ваш вопрос, вам нужен способ структурировать содержимое файлов, чтобы синтаксический анализ был для вас намного проще, XML - хороший выбор для этого, а XSD также для описания содержимого ваших xml-файлов, LINQ to XML позволит очень удобно читать его с C #.

Если вы используете XML, вы можете десериализовать файлы непосредственно в объект, так что вам вообще не нужно его разбирать.

Почему бы не двоично сериализовать ваши объекты.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top