Example #1
0
        /// <summary>
        /// Leser navn og beskrivelser av funksjonen og alle dens variable, fra en C# xml fil.
        /// Dobbelarrayen har to kolonner. Første kolonne er navn, mens andre kolonne er beskrivelser. Rad en inneholder info om funksjonen, mens resten av radene er info om variablene.
        /// </summary>
        /// <param name="funkNavn">Navnet på funksjonen man vil ha info om.</param>
        /// <param name="fil">Full path med filnavn til xml filen.</param>
        /// <returns>Dobbelarrayen har to kolonner. Første kolonne er navn, mens andre kolonne er beskrivelser. Rad en inneholder info om funksjonen, mens resten av radene er info om variablene.</returns>
        public static string[,] XmlLesVarBeskFraFunk(string funkNavn, string fil)
        {
            Xml.XmlTextReader rd = new Xml.XmlTextReader(fil);
            System.Collections.Generic.List <string> funkVarBeskLi = new System.Collections.Generic.List <string>();
            System.Collections.Generic.List <string> funkVarNavnLi = new System.Collections.Generic.List <string>();
            bool   iFunk = false;
            string reg   = "([.]" + funkNavn + "+([(]))"; //matcher punktum, etterfulgt av funksjonsnavnet, etterfulgt av parentesstart.

            while (rd.Read())
            {
                if (rd.Name == "member")
                { //Funksjonsnavn
                    if (iFunk)
                    {
                        break;        //Ferdig med funksjonen.
                    }
                    string attr = "";
                    for (int j = 0; j < rd.AttributeCount; j++)
                    {
                        attr = rd.GetAttribute(0);                                         //Hvis jeg ikke har med for-løkken, så får jeg en feilmelding.
                    }
                    if (RegExp.Regex.Match(attr, reg).Success)
                    {
                        iFunk = true;
                        funkVarNavnLi.Add(funkNavn);
                    }
                }
                else if (iFunk && rd.Name == "param")
                { //Variabelnavn og beskrivelse
                    funkVarNavnLi.Add(rd.GetAttribute(0).Trim());
                    funkVarBeskLi.Add(rd.ReadString().Trim());
                }
                else if (iFunk && rd.Name == "summary")
                { //Funksjonsbeskrivelse
                    string        attr       = rd.ReadString();
                    Parser.Parser p          = new Parser.Parser(attr);
                    string[]      funkBeskLi = p.ReadStrings('\n'); //Kvitter meg med whitespace etter linjeskift.
                    attr = "";
                    foreach (string s in funkBeskLi)
                    {
                        attr += s.Trim() + " ";                              //Erstatter linjeskift+whitespace med et mellomrom. Kan alternativt erstatte det med et linjeskift uten whitespace.
                    }
                    funkVarBeskLi.Add(attr.Trim());
                }
            }
            rd.Close();
            if (!iFunk)
            {
                Console.WriteLine("Fant ikke funksjonen " + funkVarNavnLi[0] + " i xmlfilen.");
                return(null);
            }
            string[,] funkVarNavnBeskLi = new string[funkVarBeskLi.Count, 2];
            for (int i = 0; i < funkVarNavnBeskLi.GetLength(0); i++)
            {
                funkVarNavnBeskLi[i, 0] = funkVarNavnLi[i];
                funkVarNavnBeskLi[i, 1] = funkVarBeskLi[i];
            }
            return(funkVarNavnBeskLi);
        }