none
Enum automatisch in Klasse wandeln

    Frage

  • Guten Tag.

    Ich muss eine Enumeration in eine Klasse umwandeln. Diese Enumeration hat mehrere Hundert Werte. Jede dieser Werte muss zu einem konstanten Feld in einer Klasse werden. Gibt es dafür ein Tool oder eine andere Hilfe um mit die arbeit des austauschens zu erleichtern?

    Ich habe bereits alles per XML dokumentiert, weswegen Suchen und Ersetzen mehr Fehler als erleichterung verursachte, ich testete es bereits.

    Dienstag, 20. November 2012 19:43

Antworten

  • Hallo, mir fallen da 2 kleine Ideen ein:

    1. Reguläre Ausdrücke im VS 2012 benutzen
    2. diesen Code ausführen:
            static void Main(string[] args)
            {
                bool isInEnum = false; //Bestimmt ob aktuelle Zeile in einem enum liegt
                string[] lines = File.ReadAllLines(@"C:\Mein ENUM.cs");//Laden
                for(int i=0;i<lines.Length;++i) //Alle Zeilen durchgehen
                {
                    string tmp = lines[i].Trim(new char[]{' ','\t'});//Leerzeichen, Tabs entfernen
                    if(!tmp.StartsWith("///"))//XML Kommentare ausschließen
                    {
                        if (tmp.Contains("enum")) //Enum beginnt
                        {
                            lines[i] = tmp = tmp.Replace("enum", "class"); //Schlüsselwort austauschen
                            isInEnum = true;
                        }
                        if (isInEnum)
                        {
                            if (tmp.Contains("}")) //Enum ist zuende
                                isInEnum = false;
                            if (tmp.EndsWith(","))//Nur auf , endende Zeilen akzeptieren
                            {
                                lines[i] = "public const int " + tmp.Replace(',', ';');
                            }
                        }
                    }
                    lines[i] = lines[i].Replace("class", "enum"); //Schlüsselwort austauschen
                }
                File.WriteAllLines(@"C:\Mein ENUM.cs", lines); //Speichern
            }
    Ich habe den Code weitestgehend dokumentiert. Ich habe den Code jetzt nicht großartig getestet, aber er sollte funktionieren. Nach dem erstellen am besten nochmal die letzte geschweifte Klammer setzen, damit VS den Code neu formatiert.

    PS: man muss sich nur zu helfen wissen ;)


    Koopakiller [kuːpakɪllɐ] - http://koopakiller.ko.ohost.de/



    Dienstag, 20. November 2012 19:57
    Moderator

Alle Antworten

  • Hallo, mir fallen da 2 kleine Ideen ein:

    1. Reguläre Ausdrücke im VS 2012 benutzen
    2. diesen Code ausführen:
            static void Main(string[] args)
            {
                bool isInEnum = false; //Bestimmt ob aktuelle Zeile in einem enum liegt
                string[] lines = File.ReadAllLines(@"C:\Mein ENUM.cs");//Laden
                for(int i=0;i<lines.Length;++i) //Alle Zeilen durchgehen
                {
                    string tmp = lines[i].Trim(new char[]{' ','\t'});//Leerzeichen, Tabs entfernen
                    if(!tmp.StartsWith("///"))//XML Kommentare ausschließen
                    {
                        if (tmp.Contains("enum")) //Enum beginnt
                        {
                            lines[i] = tmp = tmp.Replace("enum", "class"); //Schlüsselwort austauschen
                            isInEnum = true;
                        }
                        if (isInEnum)
                        {
                            if (tmp.Contains("}")) //Enum ist zuende
                                isInEnum = false;
                            if (tmp.EndsWith(","))//Nur auf , endende Zeilen akzeptieren
                            {
                                lines[i] = "public const int " + tmp.Replace(',', ';');
                            }
                        }
                    }
                    lines[i] = lines[i].Replace("class", "enum"); //Schlüsselwort austauschen
                }
                File.WriteAllLines(@"C:\Mein ENUM.cs", lines); //Speichern
            }
    Ich habe den Code weitestgehend dokumentiert. Ich habe den Code jetzt nicht großartig getestet, aber er sollte funktionieren. Nach dem erstellen am besten nochmal die letzte geschweifte Klammer setzen, damit VS den Code neu formatiert.

    PS: man muss sich nur zu helfen wissen ;)


    Koopakiller [kuːpakɪllɐ] - http://koopakiller.ko.ohost.de/



    Dienstag, 20. November 2012 19:57
    Moderator
  • Danke für die Antwort, das hat perfekt funktioniert, soweit ich das jetzt sehen kann. =)

    Für solche Sachen fehlt mir wohl noch ein wenig die Logik!

    Mittwoch, 21. November 2012 21:04