Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Grupo de Teaming del ClubDelphi

 
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 14-11-2005
bustio bustio is offline
Miembro
 
Registrado: oct 2003
Posts: 231
Poder: 21
bustio Va por buen camino
Contar Lineas de Codigo Logicas y Fisicas

Hola a la comunidad:

Estoy tratantdo de hacer un programa que cuente las Lineas de Codigo(Lines Of Code) de mis aplicaciones. Para ello disenne un Estandar para Contar Lineas de Codigo; y basandome en el es qeu hago el conteo de mis fuentes. Pero mis errores vienen a raiz de que no veo claro el algoritmo que tengo que seguir para hacer el conteo.
Lo primero que hice fue eliminar la indentacion de la Unit que le entro al programa. Una vez hecho esto, voy linea por linea(almacene la Unit en un componente SynEdit, que es iden al memo, lo unico que hace el realce de la sintaxis.. por lo demas es lo mismo que el memo) analizando que los dos primeros caracteres sean '//', y si lo son pues los marco con el simbolo '*' y continuo. Una vez llegado al final de la Unit en el SynEdit los comentarios simples eliminados.
Luego, y mediante el mismo proceso elimino los espacios en blanco; marcandolos tambien con '*'. Despues recorreo el codigo para eliminar los comentarios '{......}'; que es un poco mas complejo. Aqui presento el segmento para que me lo critiquen:

Código Delphi [-]
procedure TLOCounter.DelMultipleComments;
var
  i, k:  Integer;
  Token: String;
  Line:  String;
  Trash: TTrashLine;//Clase para almacenar el numero de las lineas donde hay comentarios y el tipo de comentario que es.
begin
  TrimL;//Metodos de la clase TLOCounter que elimina los espacios en blanco a la derecha y a la izquierda de las lineas del codigo que se analiza.
  TrimR;

  for i := 0 to LinesOfCode.Count - 1 do
  begin
    Line := LinesOfCode.Strings[i];
    Token := Copy(Line,1,1);//token es el primer caracter de la linea a procesar.
    If Token = '{' then
    begin
      Trash := TTrashLine.Create;
      Trash.LineNumber := i;
      Trash.TrashType := 'MC';//MC = MultiComentario
      FTrashList.Add(Trash);

      if Line[length(Line)] <> '}' then
      begin
        k := i;
        repeat
          inc(k);
          Line := LinesOfCode.Strings[k];
          Token := Copy(Line,length(Line),1);
          if Token <> '}' then
          begin
            Trash := TTrashLine.Create;
            Trash.LineNumber := k;
            Trash.TrashType := 'MC';
            FTrashList.Add(Trash);//Lista con las lineas que no me interesa analizar.
          end;
        until (Token = '}') or (k = LinesOfCode.Count - 1);
        Trash := TTrashLine.Create;
        Trash.LineNumber := k;
        Trash.TrashType := 'MC';
        FTrashList.Add(Trash);
      end;
    end;
  end;
end;
.

Ahhh!!! y una duda.. por que cuando pongo FTrash.Destroy al terminar de trabajar con el me da error? Lo qeu sucede es que almacena en la lista cualquier valor y no es el que yo almaceno.

COn todo esto hecho, solo me quedara en el SynEdit las lineas que me interesa contar; las demas estaran marcadas con '*'. Y es ahora que viene la parte mas dura... hay Lineas De Codigo Logicas y Lineas de Codigo Fisicas. A que llamo Lineas De Codigo Logicas y Fisicas? Fisicas son todas las lineas... pero logicas son las que encierran una accion completa.

Por Ejemplo:

1 TClase(MiObjeto.MiFuncion[6].Propiedad1).Elemento[3].Text :=
2 'VALOR STRING';

En este caso, 1 y 2 son Lineas De Codigo Fisicas(pues existen), pero solo hay 1 Linea De Codigo Logica, que sera 1 + 2(la 1 o la 2 por separados no son Lineas de Codigo Logicas) ya que ambas encierran una orden completa. Este es solo un ejemplo hipotetico pues en la realidad hay muchas variantes de Lineas de Codigo Logicas.
Ahora la pregunta es... como hago un algoritmo para determinar si dado un String constituye una Linea de Codigo Logica o no? Y en caso de que no lo sea.. como puedo obtener la linea de codigo logica completa?

He pensado en esa solucion desde hace tiempo y no logro armar el algoritmo. Todo lo que se me ocurre da algun error por alguna parte y es mas tarbajo ponerle el parche que escribir un codigo eficiente de verdad.

Agradezco desde ya cualquier ayuda o sugerencia.
__________________
Muchas Gracias...
Responder Con Cita
 


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 06:11:57.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi