rendered paste bodyusing 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(@"^(?<befehl>([^=])+)=(?<wert>([^=#])+)(#(?<kommentar>.*))?$");
Regex reg2 = new Regex(@"^[^=]*\[(?<abschnitt>([^\]]*))\][^=]*$");
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;
}
}
}
}