using System; using System.Text.RegularExpressions; namespace System { namespace IO { public class IniReader { private inidatei[] inizeilen; private string datei = ""; public IniReader(string file) { datei = file; string abschnitt = ""; string[] iniread = File.ReadAllLines(file); inizeilen = new inidatei[iniread.Length]; Regex reg1 = new Regex(@"^(?([^=])+)=(?([^=#])+)(#(?.*))?$"); Regex reg2 = new Regex(@"^[^=]*\[(?([^\]]*))\][^=]*$"); for (int i = 0; i < inizeilen.Length; i++) { Match m1 = reg1.Match(iniread[i]); Match m2 = reg2.Match(iniread[i]); if (m1.Success) { inizeilen[i].befehl = m1.Groups["befehl"].Value.Trim(); inizeilen[i].wert = m1.Groups["wert"].Value.Trim(); inizeilen[i].kommentar = m1.Groups["kommentar"].Value.Trim(); inizeilen[i].abschnitt = abschnitt; inizeilen[i].text = ""; } else { if (m2.Success) { abschnitt = m2.Groups["abschnitt"].Value.Trim(); } inizeilen[i].befehl = ""; inizeilen[i].wert = ""; inizeilen[i].kommentar = ""; inizeilen[i].abschnitt = ""; inizeilen[i].text = iniread[i]; } } } private struct inidatei { public string befehl; public string wert; public string kommentar; public string abschnitt; public string text; } public struct Return { public string Command; public string Value; public string Comment; public string Chapter; } public Return Get(string befehl) { Return rueckgabe = new Return(); rueckgabe.Command = befehl; rueckgabe.Value = ""; rueckgabe.Comment = ""; foreach (inidatei i in inizeilen) { if (i.befehl == befehl) { rueckgabe.Value = i.wert; rueckgabe.Comment = i.kommentar; rueckgabe.Chapter = i.abschnitt; } } return rueckgabe; } public Return[] GetChapter(string chapter) { Return[] rueckgabe = new Return[0]; foreach (inidatei i in inizeilen) { if (i.abschnitt == chapter) { Array.Resize(ref rueckgabe, rueckgabe.Length + 1); rueckgabe[rueckgabe.Length - 1].Chapter = chapter; rueckgabe[rueckgabe.Length - 1].Command = i.befehl; rueckgabe[rueckgabe.Length - 1].Comment = i.kommentar; rueckgabe[rueckgabe.Length - 1].Value = i.wert; } } return rueckgabe; } public bool Set(string befehl, string wert) { bool success = false; for (int i = 0; i < inizeilen.Length; i++) { if (inizeilen[i].befehl == befehl) { inizeilen[i].wert = wert; success = true; } } if (!success) { return success; } StreamWriter writer = new StreamWriter(datei); for (int i = 0; i < inizeilen.Length; i++) { if (!String.IsNullOrEmpty(inizeilen[i].befehl)) { writer.Write(inizeilen[i].befehl + "=" + inizeilen[i].wert); if (!String.IsNullOrEmpty(inizeilen[i].kommentar)) writer.Write(" #" + inizeilen[i].kommentar); if (i != (inizeilen.Length - 1)) { writer.WriteLine(); } } else { writer.Write(inizeilen[i].text); if (i != (inizeilen.Length - 1)) { writer.WriteLine(); } } } writer.Close(); return success; } } } }