2010-10-26 21 views
0

Bon, j'ai lu que les fichiers .INI sont maintenant obsolètes et les créateurs du .NET Framework veulent que nous utilisions des fichiers .XML. Cependant, je pense qu'il serait difficile pour certains de mes utilisateurs d'utiliser des fichiers .XML alors j'ai pensé à créer un fichier de configuration personnalisé.C# Lecture à partir d'un fichier personnalisé

J'ai une chaîne de liste qui a 3 paramètres (il est en fait la fonction d'extrait dans Scintilla), comme celui-ci:

Snippet.Insert("Name", "Code", 'char'); 

Maintenant, je veux insérer tous les extraits d'un fichier que l'utilisateur peut lui-même ajouter , y compris le nom, le code et le personnage, mais je n'ai aucune idée de comment je ferais cela. Peut-être quelque chose comme:

[Snippet1] [Snippet1Code] [Snippet1Char] 
[Snippet2] [Snippet2Code] [Snippet2Char] 
[Snippet3] [Snippet3Code] [Snippet3Char] 

Cependant, je ne sais pas comment je vais lire les valeurs de cette façon. Si quelqu'un peut me dire un moyen efficace de lire des extraits d'un fichier, je serais vraiment reconnaissant.

+5

Je pense que cela pourrait être plus difficile pour vos utilisateurs qu'un fichier .xml. –

+1

Quel est votre problème? Lire à partir d'un fichier? Trancher chaque ligne à trois paramètres? Erreur de gestion lorsque l'utilisateur met seulement deux mots sur une ligne? –

+0

Très bien, alors je suppose que je vais m'en tenir à un fichier XML. Mon problème est que je ne connais pas une "bonne" façon de le faire, mais je vais probablement utiliser un fichier XML maintenant. – david

Répondre

0

Comme d'autres l'ont suggéré, et similaire à l'approche @ gmcalab, voici un exemple rapide en utilisant Linq To XML.

public class Snippet 
{ 
    public string Name { get; set; } 
    public string Code { get; set; } 
    public char Character { get; set; } 
} 


XDocument doc = XDocument.Parse(@"<snippets> 
            <snippet name='snippet1' character='a'> 
            <![CDATA[ 
             // Code goes here 
             ]]> 
            </snippet> 
            <snippet name='snippet2' character='b'> 
            <![CDATA[ 
             // Code goes here 
             ]]> 
            </snippet> 
           </snippets>"); 

List<Snippet> snippetsList = (from snippets in doc.Descendants("snippet") 
          select new Snippet 
          { 
           Name = snippets.Attribute("name").Value, 
           Character = Convert.ToChar(snippets.Attribute("character").Value), 
           Code = snippets.Value 
          }).ToList(); 

snippetsList.ForEach(s => Console.WriteLine(s.Code)); 
0

Pourquoi ne pas simplement mettre en place vos extraits dans le fichier XML dont vous avez parlé, puis le lire avec XMLTextReader?

assez simple ...

<snippets> 

    <snippet name="Name1" char="a"> 
    <snippetCode> 
     for(int i = 0; i < 10; i++) { // do work } 
    </snippetCode> 
    </snippet> 

    <snippet name="Name2" char="b"> 
    <snippetCode> 
     foreach(var item in items) { // do work } 
    </snippetCode> 
    </snippet> 

</snippets> 

C#

public class Snippet 
{ 
    public string Name {get;set;} 
    public char Char { get; set;} 
    public string Value { get; set;} 
} 

List<Snippet> Snippets = new List<Snippet>(); 

XmlTextReader reader = new XmlTextReader ("snippets.xml"); 

Snippet snippet = new Snippet(); 

while (reader.Read()) 
{ 
    // Do some work here on the data. 
    switch (reader.NodeType) 
    { 
     case XmlNodeType.Element: 

     if(reader.Name == "snippet"){ 

      while (reader.MoveToNextAttribute()) 
      { 
       if(reader.Name == "Name"){ 
       // get name attribute value 
       snippet.Name = reader.Value; 
       } 
       else if(reader.Name == "Char"){ 
       // get char attribute value 
       snippet.Char = Char.Parse(reader.Value); 
       } 

      } 
     } 

     break; 

     case XmlNodeType.Text: //Display the text in each element. 
      //Here we get the actual snippet code 
      snippet.Value = reader.Value; 

     break; 

     case XmlNodeType. EndElement: 

      if(reader.Name == "snippet"){ 
       // Add snippet to list 
       Snippets.Add(snippet); 
       // Create a new Snippet object 
       snippet = new Snippet(); 
      } 

     break; 

    } 
} 
+0

Question à ce sujet. Comment ajouter les extraits à la liste lors du traitement du fichier .XML? – david

+0

@david vérifier ma mise à jour – Gabe

+0

Heh, merci bien que je me suis débrouillé. Néanmoins merci de me donner l'idée, vraiment l'apprécier;) – david

0

Si vous préférez les fichiers ini, j'ai lu de bonnes choses à propos Nini