Pergunta

Estou construindo um jogo em Visual Studio 2008 e para os níveis de construir, eu vou ter dois tipos de arquivos (mais do que isso, na verdade, mas esses dois são os únicos importantes para a minha pergunta) eu preciso analisar. Um vai ditar o conteúdo de um nível e será algo parecido com isto:

LevelName = "Amostra Nível"

Object1Type = "CustomObject"

Object1File = "WideFloor_DF"

Object1Position = 600600

Object2Type = "Circle"

Object2Position = 550, 500

Object2Mass = 5

etc.

O outro vai ditar as propriedades para objetos personalizados, e algo parecido com isto:

Name = "Wide Floor"

Mass = 1

GeometryMap = "WideFloor_GM"

IsStatic = true

etc.

Eu não estou muito familiarizado com expressões regulares (leia-se: eu não gosto deles porque o olhar muito parecido com o ruído na linha para compreender facilmente) e eu queria saber se existe um método mais fácil do que usar toneladas de expressões regulares

edit: Sabia que tinha esquecido alguma coisa! Eu realmente odeio arquivos xml, então eu realmente prefiro não usá-los (waaaaaaaay muito detalhado para mim). Editar 2:. Eu gosto do formato que eu vim acima com e prefere não mudar

Foi útil?

Solução

Que tal usar arquivos XML? Você pode ler e escrever-los facilmente usando XMLReader e XMLWriter objetos, e você não terá que lidar com Regex em tudo.

<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>     

Outras dicas

Se você estiver indo para ter seus arquivos em formato legível de qualquer maneira, por que não usar XML?

Se você tem controle sobre o formato de arquivo que você pode tentar algo com um analisador existente, como arquivos XML ou INI, sendo que ambos têm analisadores em .NET.

Se você está vendido no formato acima, você pode usar uma ferramenta como Lex para gerar o seu analisador para você.

Uma abordagem alternativa poderia ser a de definir uma classe que tem propriedades / coleções para armazenar todos esses dados de configuração, e torná-lo [Serializable]. Você pode, em seguida, preencher a uma configuração de exemplo, serializar-lo para um arquivo, e então você tem um arquivo de configuração XML completo que você pode editar manualmente. Quando estiver pronto para usar a configuração, apenas desserializar parte de trás arquivo XML para o objeto de configuração em seu aplicativo.

Se você absolutamente insistem em usar esse formato de arquivo, você pode construir um objeto que lê o arquivo linha por linha, puxando coisas do lado esquerdo do '=' e colocá-lo em um dicionário como a chave e tudo o direita do '=' como o valor.

No entanto, devo eco das respostas acima que dizem usar um documento XML, juntamente com um objeto XMLDocument. Você já olhou para LINQ para XML?

Bem, se eu entendi sua pergunta você quer uma forma de estruturar o conteúdo dos arquivos para que a análise será muito mais fácil para você, XML é uma boa escolha para isso, e XSD também para descrever o conteúdo do seu xml arquivos, LINQ to XML irá torná-lo muito bom para lê-lo de C #.

Se você usar XML pode deserialise os arquivos diretamente em um objeto de modo que você não precisa analisá-lo em tudo.

Por que não binário serialize seus objetos.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top