1

我正在 Visual Studio 2008 中构建游戏,为了构建关卡,我将有两种类型的文件(实际上不止这些,但这两个是唯一对我的问题重要的文件)我需要解析。一个人将决定关卡的内容,看起来像这样:

LevelName = "示例级别"

Object1Type = "自定义对象"

Object1File = "WideFloor_DF"

Object1Position = 600,600

Object2Type = "圆"

Object2Position = 550, 500

Object2Mass = 5

等等

另一个将规定自定义对象的属性,看起来像这样:

名称=“宽地板”

质量 = 1

GeometryMap = "WideFloor_GM"

IsStatic = 真

等等

我对正则表达式不是很熟悉(阅读:我不喜欢它们,因为它看起来太像线条噪音而难以理解),我想知道是否有比使用大量正则表达式更简单的方法?

编辑:我知道我忘记了什么!我真的很讨厌 xml 文件,所以我真的不想使用它们(waaaaaaaay 对我来说太冗长了)。编辑2:我喜欢我想出的格式,并且不想改变。

4

8 回答 8

7

使用 XML 文件怎么样?您可以使用 XMLReader 和 XMLWriter 对象轻松地读取和写入它们,而且您根本不需要处理 Regex。

<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>     
于 2009-06-11T05:37:03.317 回答
1

无论如何,如果您要以人类可读的格式保存文件,为什么不使用 XML?

于 2009-06-11T05:37:45.407 回答
1

如果您可以控制文件格式,您可以尝试使用现有的解析器,例如 XML 或 INI 文件,它们都在 .NET 中具有解析器。

如果您以上述格式出售,您可能会使用Lex之类的工具为您生成解析器。

于 2009-06-11T05:37:51.163 回答
1

一种替代方法可能是定义一个具有属性/集合的类来保存所有这些配置数据,并将其设为 [Serializable]。然后,您可以填充示例配置,将其序列化为一个文件,然后您就可以手动编辑一个完整的 XML 配置文件。当您准备好使用配置时,只需将 XML 文件反序列化回应用程序中的配置对象。

于 2009-06-11T05:38:54.797 回答
1

如果您绝对坚持使用该文件格式,则可以构建一个逐行读取文件的对象,从“=”左侧拉出东西并将其作为键放入字典中,并将所有内容放在右侧'=' 作为值。

但是,我必须回应上面所说的将 XML 文档与 XMLDocument 对象一起使用的答案。您是否研究过 LINQ to XML?

于 2009-06-11T05:43:33.183 回答
0

好吧,如果我理解你的问题,你想要一种结构文件内容的方法,这样解析对你来说会容易得多,XML 是一个不错的选择,XSD 也用于描述你的 xml 文件的内容,LINQ到 XML 将使从 C# 读取它非常好。

于 2009-06-11T05:39:17.137 回答
0

如果您使用 XML,您可以将文件直接反序列化为一个对象,这样您就根本不需要解析它。

于 2009-06-11T05:39:40.537 回答
0

为什么不二进制序列化你的对象。

于 2009-06-11T07:23:32.770 回答