All pastes #263421 Raw Edit

aLFie

public text v1 · immutable
·published 2006-12-01 14:58 UTC
rendered paste body
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(@"^(?<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;
            }
        }
    }
}