none
Contar lineas de codigo RRS feed

  • Pregunta

  • Necesito hacer un lector de lineas de codigo .este es mi codigo

     

    private void button1_Click(object sender, EventArgs e)

            {

                OpenFileDialog openFileDialog1 = new OpenFileDialog();

                openFileDialog1.InitialDirectory = "c:\\";

                openFileDialog1.Filter = "txt files (*.txt)|*.txt|All files (*.*)|*.*";

     

                Dictionary<int, decimal> registros = new Dictionary<int, decimal>();

     

                if (openFileDialog1.ShowDialog() == DialogResult.OK)

                {

                    using (StreamReader sr = new StreamReader(openFileDialog1.FileName))

                    {

                        String line;

     

                        while ((line = sr.ReadLine()) != null)

                        {

     

                            string[] partes = line.Split(' ');

     

                            for (int i = 0; i < partes.Length; i++)

                            {

     

                                //MessageBox.Show("" + partes[i]);

     

                            }

     

                            foreach (var x  in partes)

                            {

                                if (x.Equals("using"))

                                {

                                    contadorusing++;

                                }

     

                                if (x.Equals("void"))

                                {

                                    contadormetodos++;

     

                                }

     

                            }

     

                            Console.WriteLine("" + contadorusing);

     

                            label1.Text =Convert.ToString(contadorusing);

                            label2.Text = Convert.ToString(contadormetodos);

                            }

                        }

                    }

                }

            }

        }

     

     

    pero necesito que me cuente todas las lineas de codigo perono se como,sera que hay una propiedad que lo haga sin que me cuente lineas comentareadas ni espacios.ya me cuenta cuantos metodos tengo y cuantos using

    ademas de estos necesito saber cuantas lineas de codigo tiene cada metodo:


    Edna
    • Editado Edlucy jueves, 24 de noviembre de 2011 21:20
    jueves, 24 de noviembre de 2011 21:18

Todas las respuestas

  • Esto es una funcionalidad que demora un poco...

    contar lienas de codigo podria ser sencillo, si no concideras algunos casos, por ejemplo si exsite una linea de la siguiente manera

    /*Comentario*/ var x = 1;

    Aqui un ejemplo de no contar los comentarios

     var Count = 0;
                using (StreamReader sr = new StreamReader("")) 
                {
                    while (sr.Peek() != -1) 
                    {
                        var line = sr.ReadLine();
                        line = line.Trim();
                        if (!string.IsNullOrEmpty(line))
                            if (line.Length > 2 && line.Substring(0, 2) != "//" | line.Substring(0, 2) != "/*")
                                Count++;
                    }
                }
    


    Si quieres contar el numero de metodos o funciones podrias utilizar un Parser...

    http://www.codeproject.com/KB/recipes/codedomparser.aspx

    Este tema tiene que ver con System.Codedom... es un tema amplio de explicar... pero en resumen el ParserCode, apartir del texto que tengas como codigo construye un modelo de objetos que representa ese codigo.

    Pero Tambien podrias lograr esto con Expresiones Regulares, para contar la declaracion de cada metodo

    Saludos,

    Giancarlo Rolando Huarcaya MArtinez

     


    Giancarlo Facebook: giancarlo.huarcaya
    jueves, 24 de noviembre de 2011 22:50
  • Hola Ednacifuentes

    A mi me ha servido este código para contar todas las líneas de código, incluyendo los using, métodos y { }, remueve las etiquetas #region y #endregion y quita los comentarios de todo tipo.

            private void abrir_Click(object sender, EventArgs e)
            {
                OpenFileDialog ofd = new OpenFileDialog();
                ofd.Filter = "(.cs) | *.cs";
                ofd.Multiselect = false;
                if (ofd.ShowDialog() == System.Windows.Forms.DialogResult.OK)
                {
                    ruta.Text = ofd.FileName;
                    using (StreamReader sr = new StreamReader(ruta.Text))
                    {
                        codigo.Text = sr.ReadToEnd();
                    }
                }
                codigo2.Text = Regex.Replace(codigo.Text, @"(//.*[\n])|(///.*[\n])|" + @"(#(end)?region.*[\n])|(/\*.*?\*/)|(/\*[^""]*\*/)", String.Empty, RegexOptions.None);
            }
    
            private void contar_Click(object sender, EventArgs e)
            {
                int cont = 0;
                string[] lines = codigo2.Text.Split('\n');
                foreach (string line in lines)
                {
                    if (line.Trim() != String.Empty)
                    {
                        cont++;
                    }
                }
                lineas.Text = cont.ToString();
            }
    

    codigo y codigo2 son dos richtextbox. He utilizado un Regex.Replace para quitar los comentarios y etiquetas #region #endregion.

    Saludos


    Antonio Lobo
    Para el correcto funcionamiento, y que otros usuarios se puedan beneficiar de la solucion de esta pregunta por favor marca las respuestas que te hayan ayudado como "Respuesta".
    Si la respuesta te ha sido util Votala.
    Mi blog
    viernes, 25 de noviembre de 2011 15:36