Uniglot/CSharp/Configure.csharp

69 lines
2.7 KiB
Plaintext

using System;
using System.IO;
using System.Text;
using System.Collections.Generic;
namespace AniNIX.Shared {
public class Configure {
// This is the file to configure from
private List<String> lines = new List<String>();
/// <summary>
/// Create a new Configure object
/// </summary>
/// <param name="filename">The Config file</param>
public Configure(String filename) {
StreamReader fileReader = new StreamReader(filename);
String line = fileReader.ReadLine().Trim();
while (line != null) {
//Ignore comments prefixed with '#'
if (line.IndexOf('#') > 0) {
if (line[0] == '#') continue;
lines.Add(line.Split('#')[0].Trim());
} else {
lines.Add(line);
}
line = fileReader.ReadLine();
}
fileReader.Close();
fileReader.Dispose();
}
/// <summary>
/// Create a new string dictionary from the named section.
/// </summary>
/// <param name="section">The name of the section header</param>
/// <returns>New Dictionary<String,String> of read key-value pairs from config section.</returns>
public Dictionary<String,String> ReadSection(String section) {
Dictionary<String,String> foundEntries = new Dictionary<String,String>();
String header = String.Format("[ {0} ]",section);
int i = 0, j;
// Read to find the header
for (i = 0; i < lines.Count; i++) {
if (lines[i].Equals(header)) {
i++;
for (j = i; j < lines.Count && lines[j] != null && !String.IsNullOrWhiteSpace(lines[j]); j++) {
int index = lines[j].IndexOf('=');
String key = lines[j].Substring(0,index), value = lines[j].Substring(index+1);
if (foundEntries.ContainsKey(key)) { foundEntries[key] = value; } else { foundEntries.Add(key,value); }
}
break; // Most configuration utilities don't allow multiple same-named sections
}
}
return foundEntries;
}
/// <summary>
/// API for printing the configured section
/// </summary>
/// <param name="sectionEntries">The dictionary that has been read in</param>
public static void PrintSectionAsRead(Dictionary<String,String> sectionEntries) {
foreach (KeyValuePair<string,string> keyValue in sectionEntries) {
Console.WriteLine(String.Format("Key: {0} -- Value: {1}",keyValue.Key,keyValue.Value));
}
}
}
}